![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2006
Сообщений: 36
|
Здравствуйте.
Есть код, который должен осуществлять в игре выстрел. Точнее, при нажатии пробела цеплять к позиции оружия экземпляр пули и в дальнейшем её перемещать) Кроме того, между выстрелами должен выдерживаться определённый интервал, чтобы пушка не стреляла с частотой фрэйм рэйта. Вот что я написал, но это, увы, не работает. Подскажите, в чём ошибка и как реализовать подобный интервал? |
|
|||||
|
Регистрация: 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();
}
}
|
|
|||||
|
Регистрация: 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);
}
|
|
|||||
|
Регистрация: 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);
}
}
Так вот вопрос, почему в последнем случае переменная shoot трэйсится как неопределённая? Мы же в пределах одного класса работаем! Какие ей пути надо прописывать? Или, может, через get её как-то передавать надо? Заранее спасибо за помощь. Я классы только начал осваивать, многое непонятно, если конкретно пошлёте читать что-то по теме - буду только рад)) Последний раз редактировалось Korsar Nik; 07.06.2008 в 00:27. Причина: Забыл кусок кода |
|
|||||
|
Регистрация: 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|