Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Присоединение с интервалом объектов в игре (http://www.flasher.ru/forum/showthread.php?t=112439)

Korsar Nik 27.05.2008 22:26

Присоединение с интервалом объектов в игре
 
Здравствуйте.
Создавая игру, столкнулся со следующей проблемой. Отбросив всё лишнее, получается такой код:
Код:

enemyCounter = 0;
enbulCounter = 0;
function enbulMove() {
        enbulCounter++;
        _root.attachMovie("enbul", "enbul"+enbulCounter, _root.getNextHighestDepth(), {_x:_root["enemysmall"+enemyCounter]._x, _y:_root["enemysmall"+enemyCounter]._y+40});
        _root["enbul"+enbulCounter].onEnterFrame = function() {
                this._y+=5;
        }
}
function enemyAppear() {
        enemyCounter++;
        // начальная позиция врага
        var x1 = Math.round(220*Math.random())+210;
        var y1 = Math.round(150*Math.random())+20;
        var flagpos = 2*Math.round(Math.random())-1;
        // аттачим врага
        _root.attachMovie("enemysmall", "enemysmall"+enemyCounter, _root.getNextHighestDepth(), {_x:x1, _y:y1});
        setInterval(enbulMove, 800);
        // движение врага
        _root["enemysmall"+enemyCounter].onEnterFrame = function() {
                        this._x += flagpos;
                        if (this._x>600) {
                                flagpos = -flagpos;
                        }
                        if (this._x<40) {
                                flagpos = -flagpos;
                        }
        };
}
setInterval(enemyAppear, 2000);

Кроме кода, есть ещё 2 клипа в библиотеке: enemysmall и enbul.
C интервалом 2 секунды на сцену аттачатся и начинают двигаться враги. В то же время с интервалом 0,8 секунды к этим врагам аттачатся пули, двигающиеся вниз. Так вот, проблема в том, что с появлением нового врага предыдущий перестаёт стрелять, пули аттачатся только к новому. А надо, чтобы каждый враг стрелял своими пулями со своим интервалом, независимо от других врагов.
Подозреваю, что нужно как-то перебирать enemyCounter в координатах пули. Но вот как именно - не могу додуматься. А может быть в чём-то другом загвоздка. Помогите, пожалуйста, разобраться.

Kuruki 27.05.2008 23:17

Код:

enemyCounter = 0;
enbulCounter = 0;
function enbulMove(target:MovieClip) {
        enbulCounter++;
        _root.attachMovie("enbul", "enbul"+enbulCounter, _root.getNextHighestDepth(), {_x:target._x, _y:target._y+40});
        _root["enbul"+enbulCounter].onEnterFrame = function() {
                this._y+=5;
        }
}
function enemyAppear() {
        enemyCounter++;
        // начальная позиция врага
        var x1 = Math.round(220*Math.random())+210;
        var y1 = Math.round(150*Math.random())+20;
        var flagpos = 2*Math.round(Math.random())-1;
        // аттачим врага
        _root.attachMovie("enemysmall", "enemysmall"+enemyCounter, _root.getNextHighestDepth(), {_x:x1, _y:y1});
        setInterval(enbulMove, 800, _root["enemysmall"+enemyCounter]);
        // движение врага
        _root["enemysmall"+enemyCounter].onEnterFrame = function() {
                        this._x += flagpos;
                        if (this._x>600) {
                                flagpos = -flagpos;
                        }
                        if (this._x<40) {
                                flagpos = -flagpos;
                        }
        };
}
setInterval(enemyAppear, 2000);

А вообще я бы вам посоветовал распределить все это по отдельным методам и использовать классы

Korsar Nik 28.05.2008 00:04

Ух ты, заработало, спасибо.

А почему лучше распределять по методам и использовать классы? Удобнее редактировать код или оптимизированнее получается? Или возможностей больше?

Kuruki 28.05.2008 00:10

Оптимизированнее, всмысле быстродейственнее? Вряд ли.
А вот все остальное - да.

qazwsx 28.05.2008 11:05

Возможностей может и не больше но удобней в тысячи раз.


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

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