Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: hitTest...
Flash Zone Forum > Macromedia Flash > ActionScript
Nihil
При пересечении двух мувиков и нажатии клавиши проигрывается анимация:
Код
onClipEvent(enterFrame){
if(_root.body2.hitTest(_root.body.hands)&& Key.isDown(69)){
                    _root.body2.gotoAndPlay("blood");
                }
}

Но при зажатой клавише анимация не успевает проиграться (виден только кадр "blood"), и проигрывается до конца только при отпускании. Можно ли сделать, чтобы при зажатой клавише анимация проигрывалась полностью?


И ещё...
Аттачатся пули:
Код
shoot = false;
counter = 0;
n = 0;
_root.onEnterFrame = function(a) {
//Атачим пулю

if (Key.isDown(Key.SPACE) && shoot == false) {
    shoot = true;
    n++;
    attachMovie("bullet","bullet"+n,n);
    _root["bullet"+n]._x = _root.body._x;
_root["bullet"+n]._y = _root.body._y+15;
}

//Запускаем счетчик, для пауз между выстрелами.

if (counter<5 && shoot == true) {
    counter += 1;
}
if (counter == 5) {
    shoot = false;
    counter = 0;
}
for (i=0; i<=n; i++) {
    this["bullet"+i]._x +=25;
}

//Удаляем старые пули.

if (this["bullet"+i]._x>1100) {
    for (i=0; i<=9; i++) {
        removeMovieClip(this["bullet"+i]);
    }
}

};


При попадании пуль в цель, также должна проигрываться анимация. Я написал так:
Код
onClipEvent(enterFrame){
if(_root.body2.hitTest(_root["bullet"+i])){
                    _root.body2.gotoAndPlay("blood");
                }
}

Однако анимация не идёт
chingachgoog
Цитата(Nihil @ 4.07.2011 - 14:21) *
при зажатой клавише анимация не успевает проиграться (виден только кадр "blood"), и проигрывается до конца только при отпускании. Можно ли сделать, чтобы при зажатой клавише анимация проигрывалась полностью?


Можно. Только событие должно быть не enterFrame, а какое-нибудь keyPress, хотя не уверен, что код НА мувиках не слажает.
Nihil
Цитата(chingachgoog @ 4.07.2011 - 21:51) *
Можно. Только событие должно быть не enterFrame, а какое-нибудь keyPress, хотя не уверен, что код НА мувиках не слажает.

keyPress это для кнопки же... Попробовал keyDown - всё точно также
chingachgoog
Косяк в том, что событие непрерывно генерится пока нажата клавиша. А надо сделать единоразовое событие.
Тогда тут нужны флаги. Наал клавишу - сработало и флаг выскочил. Пока флаг стоит - скипаем действие. Отпустили клавишу - флаг убрали.
Nihil
Цитата(chingachgoog @ 6.07.2011 - 20:04) *
Косяк в том, что событие непрерывно генерится пока нажата клавиша. А надо сделать единоразовое событие.
Тогда тут нужны флаги. Наал клавишу - сработало и флаг выскочил. Пока флаг стоит - скипаем действие. Отпустили клавишу - флаг убрали.

Что за флаги? ohmy.gif
HaWK
Nihil, Boolean-переменные.
Nihil
Цитата(HaWK @ 7.07.2011 - 14:20) *
Nihil, Boolean-переменные.

А да... я пытался подобное сделать, но не получилось. Так и не придумал куда переменные вставить. Я пытался как-то так сделать:
Код
onClipEvent(enterFrame){
if(_root.body2.hitTest(_root.body.hands)&& Key.isDown(69)&& a==false){
                    _root.body2.gotoAndPlay("blood");
a=true;
                }
}

И в кадре
Код
a=false;
HaWK
Может так:
Код
onClipEvent(enterFrame){
if(_root.body2.hitTest(_root.body.hands)&& Key.isDown(69)&& a==false){
     if(!a) {                    
          _root.body2.gotoAndPlay("blood");
          a=true;
     }
}
}
Nihil
Так не проигрывается анимация
HaWK
Код
&& a==false

ой, чё-то я этого не заметил.

Покажите весь код.
Nihil
Я вроде и так весь код, который за этот момент отвечает, написал=/ Остальной код у меня другие действия выполняет...
MustLive
Цитата
Что за флаги?

Nihil, это chingachgoog имел в виду, что флаг тебе в руки biggrin.gif. Шучу, речь идёт о флагах - логических переменных, как тебе уже объяснил HaWK.

Код твой срабатывает неправильно потому, что ты неверно его записал (потому и анимация не проигрывается). Ранее chingachgoog уже говорил, что событие должно быть не enterFrame, дабы решить эту задачу, а ты в своём коде по прежнему используешь enterFrame. Флаги используй уже потом, после того как выберешь нужное событие и напишешь код обработчика для него.
Nihil
Ну попробовал так:
Код
onClipEvent(keyDown){
    if(_root.body2.hitTest(_root.body.hands)&& Key.isDown(69)&& a==false){
        if(!a) {  
                    _root.body2.gotoAndPlay("blood");
                    a=true;
        }
    }
}

Всё равно не работает...
Nihil
Алсо, второй вопрос. Как сделать, чтобы в копиях мувиклипов, создаваемых при помощи attachMovie, работала hitTest? Я пишу так:
Код
onClipEvent(enterFrame){
if(_root.body2.hitTest(_root["bullet"+i])){
                    _root.body2.gotoAndPlay("blood");
                }
}
MustLive
Цитата
Всё равно не работает...

Потому что не так записываешь. Тебе нужно указать обработчик без onClipEvent (как это делать я писал на форуме).

И начни указывать весь код в кадрах (что enterFrame, что обработчик нажатий на клавиши), а не на объектах - точно также как ты сделал в коде для размещения пуль. Начни это делать прямо с этого флеш-проекта wink.gif.

Цитата
Как сделать, чтобы в копиях мувиклипов, создаваемых при помощи attachMovie, работала hitTest?

Всё зависит от того, какой код и где размещать. Тебе будет проще не держать этот код на/в мувиках (включая все копии), а разместить его в кадре. Пройтись в цикле (например, for) по всех копиям и для всех них проверить hitTest. При этом ты должен учитывать вышеописанную ситуацию с проигрыванием анимации (если ты хочешь, чтобы при hitTest-е проигралась анимация).
Nihil
Цитата(MustLive @ 10.07.2011 - 03:02) *
Потому что не так записываешь. Тебе нужно указать обработчик без onClipEvent (как это делать я писал на форуме).

И начни указывать весь код в кадрах (что enterFrame, что обработчик нажатий на клавиши), а не на объектах - точно также как ты сделал в коде для размещения пуль. Начни это делать прямо с этого флеш-проекта wink.gif.

Да я так изначально и начинал делать, но в кадре почемут эта часть кода не работала (хотя всё правильно было), и только когда в мувиклип записал заработала

Цитата(MustLive @ 10.07.2011 - 03:02) *
Всё зависит от того, какой код и где размещать. Тебе будет проще не держать этот код на/в мувиках (включая все копии), а разместить его в кадре. Пройтись в цикле (например, for) по всех копиям и для всех них проверить hitTest. При этом ты должен учитывать вышеописанную ситуацию с проигрыванием анимации (если ты хочешь, чтобы при hitTest-е проигралась анимация).

О, когда в цикл прописал hitTest, анимация при пересечении с пулей заработала. Но также, как и с зажатой клавишей, пока пуля с объектом пересекаются, непрерывно проигрывается первый кадр анимации
Nihil
Я таки сделал это! cool.gif Взял код который я изначально писал
Код
if(_root.body2.hitTest(_root.body.hands)&& Key.isDown(69)&& _root.a==false){  
                    _root.body2.gotoAndPlay("blood");
                    _root.a=true;
                }

Только написал его в кадр. Странно, что в мувиклипе не работал, вроде функция одна и та же...
А чтоб значение переменной возвращалось, поставил в последний кадр анимации a=false
MustLive
Как видишь, Nihil, размещения кода в кадре творит чудеса wink.gif. Так что правильная запись кода, причём в кадре, позволяет решить эти задачи - и hitTest будет срабатывать и анимация будет нормально проигрываться.

Цитата
Странно, что в мувиклипе не работал, вроде функция одна и та же...

Явно влияет именно место размещения кода, как я говорил ранее. Изначально ты размещал код в блоке onClipEvent, в котором он глючил (проигрывался лишь первый кадр анимации), а когда ты разместил код в кадре в теле безымянной функции function(a), то всё заработало как надо.
Русская версия IP.Board © 2001-2013 IPS, Inc.