Форум 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=135446)

boris1029 23.01.2010 18:19

Не дублируется клип выстрела в игре.
 
У меня есть выстрел bullet. Если его не дублировать, то при воспроизведении его в тот момент, когда он УЖЕ запущен тот который запущен удаляется, а тот который при нажатии должен начаться начинается. Я дублировал этот клип, и теперь, по идее, он должен запускаться любое количество раз дублируясь.
Я применил вот этот код:
Код AS1/AS2:

bullet._visible = false;
Key.addListener(this);
onKeyDown = function () {
        if (Key.isDown(Key.SPACE)) {
                d = bullet.duplicateMovieClip("p" + i, i);
                d._x = bullet._x;
                d._y = bullet._y;
                d = true;
        }
};

Так вот, он не дублируется. Поправьте код пожалуйста.

mooncar 23.01.2010 18:25

Код рабочий. Проверьте в новом проекте.
Единственное, что вызывает недоумение, вот эта строка:
Код AS1/AS2:

d = true ;

Тут вы приравниваете объект типа MovieClip булевому значению. Это как понимать?
Понятно, что если мувик существует, он тру, компилятор это переварит, но смысла это не несет.
Можно так:
Код AS1/AS2:

d.testvar = true ;

И вот эти строки избыточны, так как дубль всегда появляется в тех же координатах, что и оригинал, если не принять спец. мер:
Код AS1/AS2:

d._x = bullet._x ;
d._y = bullet._y ;

По существу. Если ваша проблема состоит в том, что удаляется предыдущий дубль, то у вас просто дубли возникают на одной и той же глубине, вам надо делать i возрастающей от выстрела к выстрелу.
Код AS1/AS2:

bullet._visible = false ;
Key.addListener(this);
var i:Number = 0;
onKeyDown = function () {
        if (Key.isDown(Key.SPACE)) {
                i++;
                d = bullet.duplicateMovieClip('p' + i, i);
 
        }
};

Добавлено через 22 минуты
Вот вам решение:
Вам надо ввести условие. На последнем кадре анимированного мувика запишите.
Код AS1/AS2:

stop();
this._visible = false;
_parent.doAllowShot();

И основной код будет таким:
Код AS1/AS2:

bullet._visible = false ;
bullet.stop(); //оригинал нужно остановить, чтобы он хоть невидим, но не проигрался также
var allowShot:Boolean = true ;
var i:Number = 0;
Key.addListener(this);
 
onKeyDown = function () {
        if (Key.isDown(Key.SPACE) && allowShot) {
                allowShot = false ;
                i++;
                d = bullet.duplicateMovieClip("p" + i, i);
        }
};
 
function doAllowShot () {
        allowShot = true ;
}

Вообще лучше это организовать не дублированием, а аттачем из библиотеки, чтобы не загромождать сцену и не писать лишнего кода остановки оригинала.

boris1029 23.01.2010 20:22

спасибо.:)


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

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