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

dimaMJ 10.02.2013 16:19

вот обьясните мне почему в этом коде (комментарий читайте ниже)
Код AS1/AS2:

var nextBulletTime = 0;
        var nextBullet = 0;
        var bullets = [];
 
        // init score
        var score = 0;
 
 
 
function shootBullet() {
 
 
        // init score
 
 
        // see whether there has been enough time to reload
        if (getTimer() > nextBulletTime) {
trace(nextBulletTime); // почему тут выводит ноль? когда должно выводить сначала 0 потом
//(getTimer()+1000;) а оно постоянно дает ноль из-за чего паузы совсем нет ну я не пойму
                var depth = this.getNextHighestDepth();
var newBullet = attachMovie("bullet","bullet_"+nextBullet,depth);
 
newBullet._x =_root.cat._x+13;
newBullet._y = _root.cat._y+25;
 
bullets.push(newBullet);
 
 
 
 
                //get set for next bullet
                nextBullet++;
                nextBulletTime = getTimer()+1000;
 
                var mySound2 = new Sound();
        mySound2.attachSound("booll");
        mySound2.start();
        }
 
}


Hauts 10.02.2013 16:44

Ноль дает в самом начале. Так как вы инициализировали переменную с таким значением.

Ctrl + Shift + F автоформатирование кода.

Кстати я бы чуток подправил бы код. Вам nextBullet не нужно скорее всего (достаточно использовать "bullet_"+depth для имени новой пули). Если нужно — тогда ассоциативное название не помешало бы, например, bulletCounter (счетчик пуль).

И вынес бы в отдельную переменную минимальную задержку перед следующим выстрелом, например так:
Код AS1/AS2:

var nextShootDelay = 1000;

Чтобы можно было потом подправить в одном месте это значение, а не искать по коду, где эти задержки используются.

Добавлено через 4 минуты
Да, и изначальное значение для nextBulletTime поставил бы -nextShootDelay , чтобы можно было сразу при старте игры стрелять, а не ждать, пока пауза пройдет.

dimaMJ 10.02.2013 17:12

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

nextBulletTime = getTimer()+1000;

будет постоянно менять значение nextBulletTime при вызове ф-ции нажатием кнопки а значение всегда остается таким каким я его задал к примеру если будет 1000 изначально будет задержка а потом как время таймера станет больше 1000 все задержки нет уже

Hauts 10.02.2013 17:30

dimaMJ, не забывайте про запятые и точки, на форуме принято грамотно писать :)

Код AS1/AS2:

var nextBulletTime = 0;
 
function shootBullet() {
        if (getTimer() > nextBulletTime) {
                trace(nextBulletTime);
                nextBulletTime = getTimer() + 1000;
        }
}
 
var keyListener = {};
keyListener.onKeyDown = function() {
        if (Key.getCode() == Key.SPACE) {
                shootBullet();
        }
};
Key.addListener(keyListener);

У меня все работает, я не совсем понимаю, в чем у вас проблема.

dimaMJ 10.02.2013 17:50

Цитата:

Сообщение от Hauts (Сообщение 1120078)
var keyListener = {};
keyListener.onKeyDown = function() {
if (Key.getCode() == Key.SPACE) {
shootBullet();
}
};
Key.addListener(keyListener);[/as]

а где вы это прописывали? в кадре или в классе? класс ругается почему то
- Этот оператор в определении класса недопустимо.

Hauts 10.02.2013 17:57

Весь код из моего предыдущего сообщения я прописал в кадре.

dimaMJ 10.02.2013 17:57

добавил событие кнопки в кадр и получается такое что при нажатии пробела один раз сначала выводит много нулей, а когда второй раз то вот такое
0
0
0
7167
7185
7185
7185
7185
7185
7185
7185
7185
7185
7185
7185
7185
7185
7186
7186
7186
7186
7186
7186
7186
7186
7186
7186
7186
7186
7186
7186
7186
7187
7187
7187
7187
7187
7187
0
0
0
0
дело в том что у меня при нажатии еще вызывается звук и он как то ужасно искажается от этого

Hauts 10.02.2013 18:00

Если вы тестируете во флэше (в среде разработки), то зайдите в меню плеера (при тестировании) "Control" и щелкните "Disable keyboard shortcuts". Что-то мне подсказывает, что у вас там несколько кадров, а по нажатию на пробел (при отладке), у вас включается воспроизведение.

Хотя я не уверен.

dimaMJ 10.02.2013 18:07

сделал ничего не изменилось странно как то при зажатии пробела паузы нет

Hauts 10.02.2013 18:10

dimaMJ, не забывайте про запятые, точки и большие буквы в начале предложений. Серьезно, правила для всех, не дожидайтесь замечаний от модераторов.

Выкладывайте исходник тестовый, посмотрю, как время будет.


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

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