Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.05.2008, 23:01
Korsar Nik вне форума Посмотреть профиль Отправить личное сообщение для Korsar Nik Найти все сообщения от Korsar Nik
  № 1  
Ответить с цитированием
Korsar Nik

Регистрация: May 2006
Сообщений: 36
По умолчанию Интервал между выстрелами.

Здравствуйте.
Есть код, который должен осуществлять в игре выстрел. Точнее, при нажатии пробела цеплять к позиции оружия экземпляр пули и в дальнейшем её перемещать) Кроме того, между выстрелами должен выдерживаться определённый интервал, чтобы пушка не стреляла с частотой фрэйм рэйта.

Код:
zigbulCounter = 0;
this.onEnterFrame = function() {
	if (Key.isDown(Key.SPACE)) {
		function shoot() {
			zigbulCounter++;
			zigbulname = "zigbul"+i;
			_root.attachMovie("zigbul", "zigbulname", i, {_x:zig._x+zig._width/2, _y:(zig._y+10)});
		}
		setInterval(this, "shoot", 300);
	}
}
Вот что я написал, но это, увы, не работает. Подскажите, в чём ошибка и как реализовать подобный интервал?

Старый 19.05.2008, 23:19
Vertax вне форума Посмотреть профиль Отправить личное сообщение для Vertax Найти все сообщения от Vertax
  № 2  
Ответить с цитированием
Vertax

Регистрация: Oct 2005
Сообщений: 207
Что то типа:
Код:
lastShoot = 0;
timeOut = 1000;//Секунда

zigbulCounter = 0;
shoot = function() 
{
	zigbulCounter++;
	zigbulname = "zigbul"+i;
	_root.attachMovie("zigbul", "zigbulname", i, {_x:zig._x+zig._width/2, _y:(zig._y+10)});
}

this.onEnterFrame = function() 
{
	if (Key.isDown(Key.SPACE) && lastShoot + timeOut < getTimer()) 
	{
		lastShoot = getTimer();
		shoot();
	}
}

Старый 20.05.2008, 01:09
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 3  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Код:
var shoot:Boolean = true;
var shootID:Number;
var depth:Number = 0;
Key.addListener(this);
this.onKeyDown = function () {
	if (Key.getCode() == Key.SPACE && shoot) {//если нажат спэйс и shoot==true
		_root.attachMovie("zigbul", "zigbul" + depth, depth, { _x:zig._x + zig._width / 2, _y:zig._y + 10 } );
		_root["zigbul" + depth].onEnterFrame = move;
		shoot = false;//запретить выстрел
		shootID = setInterval(enableShoot, 300);
		depth++;
	}
}
//двигаться
function move():Void {
	this._x++;
}
//разрешить выстрел
function enableShoot():Void {
	shoot = true;
	clearInterval(shootID);
}
Все работает, при условии, что код находится на гл врем диаграмме.

Старый 07.06.2008, 00:24
Korsar Nik вне форума Посмотреть профиль Отправить личное сообщение для Korsar Nik Найти все сообщения от Korsar Nik
  № 4  
Ответить с цитированием
Korsar Nik

Регистрация: May 2006
Сообщений: 36
Kuruki,
Сейчас переписываю игру в классы и возникла новая проблема с реализацией стрельбы. Решил прибегнуть к Вашему методу (до этого реализовывал интервал проще, но топорнее, через n-ое количество фреймов, теперь делаю по уму). Так вот, если выделить добавление пуль как отдельный класс, то выстрел работает единожды. Я разобрался, что дело в переменной shoot. Если отбросить лишнее, выглядит класс так:

Код:
class Zig_game.Bul extends MovieClip {
	var shoot:Boolean;
	var shootID:Number;
	var depth:Number;
             // Конструктор
	function Bul() {
		shoot = true;
		depth = _root.getNextHighestDepth();
		Key.addListener(this);
		this.onKeyDown = function() {
			if (Key.getCode() == Key.SPACE && shoot) {
				trace(shoot);  // выдаёт true
				shoot = false;
				trace(shoot);  // выдаёт false
				shootID = setInterval(enableShoot, 1000);
				depth++;
			}
		};
	}
	function enableShoot():Void {
		shoot = true;
		trace(shoot); // выдаёт undefined
		clearInterval(shootID);
	}
}
В самом проекте просто создаю экземпляр класса.
Код:
var bul:Bul = new Bul();
Так вот вопрос, почему в последнем случае переменная shoot трэйсится как неопределённая? Мы же в пределах одного класса работаем! Какие ей пути надо прописывать? Или, может, через get её как-то передавать надо?
Заранее спасибо за помощь. Я классы только начал осваивать, многое непонятно, если конкретно пошлёте читать что-то по теме - буду только рад))


Последний раз редактировалось Korsar Nik; 07.06.2008 в 00:27. Причина: Забыл кусок кода
Старый 07.06.2008, 00:32
tikhop вне форума Посмотреть профиль Отправить личное сообщение для tikhop Найти все сообщения от tikhop
  № 5  
Ответить с цитированием
tikhop

Регистрация: Jul 2006
Сообщений: 170
Код:
class Zig_game.Bul extends MovieClip {
	var shoot:Boolean;
	var shootID:Number;
	var depth:Number;
             // Конструктор
	function Bul() {
                var thisInstance=this //ссылка на экземпляр
		shoot = true;
		depth = _root.getNextHighestDepth();
		Key.addListener(this);
		this.onKeyDown = function() {
			if (Key.getCode() == Key.SPACE && shoot) {
				trace(shoot);  // выдаёт true
				shoot = false;
				trace(shoot);  // выдаёт false
				shootID = setInterval(enableShoot, 1000, thisInstance); // передаем ссылку на экземпляр
				depth++;
			}
		};
	}
	function enableShoot(thisInstance):Void {
                
		thisInstance.shoot = true;
		trace(thisInstance.shoot); // должно выдавать true
		clearInterval(shootID);
	}
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.