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

alex001 12.06.2009 09:45

проигрывание мув клип при нажатой клавише и проигрывание его в обратную сторону
 
доброе время суток, флэшеры. :)
есть вопрос.
есть мув клип. в нем около 100 кадров.
надо чтобы при нажатии клавиши вверх мув клип проигрывался вперед. а при нажатии соответственно назад он проигрывался В ОБРАТНУЮ СТООРОНУ. :confused:
не знаю как сделать ни то ни другое :wacko:

Добавлено через 2 часа 53 минуты
никто незнает? :(

script_user 12.06.2009 12:49

мне бы тоже было интерестно.

Dr.OH 12.06.2009 13:19

Код AS1/AS2:

onEnterFrame = function() {
    prevFrame();
}


alex001 12.06.2009 13:23

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

KiL33 12.06.2009 13:48

Делай аналогично этому
Код AS1/AS2:

this.createEmptyMovieClip("square_mc", this.getNextHighestDepth());
square_mc.beginFill(0xFF0000);
square_mc.moveTo(10, 10);
square_mc.lineTo(100, 10);
square_mc.lineTo(100, 100);
square_mc.lineTo(10, 100);
square_mc.lineTo(10, 10);
square_mc.endFill();
 
var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
    switch (Key.getCode()) {
    case Key.UP :
    square_mc._y -= 10;
  break;
    case Key.DOWN :
    square_mc._y += 10;
    break;
    }
};
Key.addListener(keyListener_obj);

square_mc-это твой мувик со ста кадрами..по нажатии на UP вызывай play()..при нажатии на Down зацикли prevFrame c условием 0 кадр..и усё.

Dr.OH 12.06.2009 14:07

Ты нажал клавишу вниз и на событие onEnterFrame твоего мувика вешаем функцию prevFrame(). Благодаря этому проигрывание фреймов будет происходить в обратном порядке. Когда нажали клавишу вверх просто удаляем этот обработчик.
Т.е.? пусть твой клип называется my_mc:
Код AS1/AS2:

var keyListener_obj:Object = new Object();
keyListener_obj.onKeyDown = function() {
    switch (Key.getCode()) {
      case Key.UP :
          delete my_mc.onEnterFrame;
      break;
      case Key.DOWN :
          my_mc.onEnterFrame = function() {prevFrame();}
      break;
    }
};
Key.addListener(keyListener_obj);


alex001 12.06.2009 14:08

kil33,не совсем понял код. чтобы он двигался вверх вниз мне не надо. мне надо при нажатии на клавише вверх он не двигался а играл анимацию пока клавиша нажата. а когда нажата клавиша вниз он проигрываеться задом на перед. но с того места где он остановился. будет игрок. при нажатии на клавише вперед будет анимация дороги.(мув клипа с сто кадрами.).
Dr.OH, что то не работает этот код. а когда не неажато не вверх ни вниз мув клип должен останавливаться. мув клип должен проигрываться назад ПОКА клавиша вниз нажата.

Gal4enochek 12.06.2009 15:25

Код AS1/AS2:

mc.stop(); // стопорим ваш мувик
// flag - переменная которая определяет в какую сторону будет проигрываться мувик
// (1 - вперед, -1 - назад, 0 - стоять на месте).
var flag :Number = 0;
// определем функцию для мувика
mc.onEnterFrame = function(){
        if (flag == 1) mc.nextFrame()// переходим на следующий кадр
        if (flag == -1) mc.prevFrame()// переходим на предыдущий кадр
        // во всех остальных случаях мувик будет стоять
}
// листнер
var listener :Object = new Object();
// обработчик нажатий клавиши
listener.onKeyDown = function() {
    switch (Key.getCode()) {
      case Key.UP :
          flag = 1// если нажата вверх то выставляем флаг в 1
      break;
      case Key.DOWN :
          flag = -1  // если нажата вниз то - -1
      break;
    }
};
// обработчик отпускания клавиши сбрасываем флаг в 0, чтобы мувик остановился
listener.onKeyUp = function() {
    switch (Key.getCode()) {
      case Key.UP :
          flag = 0;
      break;
      case Key.DOWN :
          flag = 0
      break;
    }
};
// вешаем листнер с обработчиками на клвиатуру
Key.addListener(listener);


alex001 12.06.2009 15:55

не понял кода, НО РАБОТАЕТ!!!
спасибо огромное.

Gal4enochek 12.06.2009 16:59

дописала комменты, может понятнее будет :)

alex001 12.06.2009 17:27

спасибо. намного понятнее.

KiL33 12.06.2009 17:52

тыгды лучше так
Код AS1/AS2:

mc.stop();
var flag:Number = 0;
// определем функцию для мувика
function start_f(num:Number) {
        mc.onEnterFrame = function() {
                if (num) {
                        mc.nextFrame();// переходим на следующий кадр
                } else {
                        mc.prevFrame();// переходим на предыдущий кадр
                }
                trace(flag == num);
        };
}
var listener:Object = new Object();
// обработчик нажатий клавиши
listener.onKeyDown = function() {
        switch (Key.getCode()) {
                case Key.UP :
                        start_f(1);// если нажата вверх фалсе
                        break;
                case Key.DOWN :
                        start_f(0);// если нажата вниз то труе
                        break;
        }
};
listener.onKeyUp = function() {
        switch (Key.getCode()) {
                case Key.UP :
                        delete mc.onEnterFrame;//убиваем нах
                        break;
                case Key.DOWN :
                        delete mc.onEnterFrame;//туда же
                        break;
        }
};
// вешаем листнер с обработчиками на клвиатуру
Key.addListener(listener);


alex001 16.06.2009 09:33

код весь понял но появилась необходимость при нажатии верх и налево чтобы мувик играл вперед но в два раза медленее.тоесть должно быть нажато 2 клавиши одновременно. при нажатии вперед и вправо должно происходить тоже самое.
много хочу, но это последнее. :D

Gal4enochek 16.06.2009 12:04

А что означает
Цитата:

при нажатии вперед и вправо
?

Ну введите несколько флагов
Код AS1/AS2:

var  upPress :Boolean  = false;
var  downPress :Boolean  = false;
var  leftPress :Boolean  = false;
var  rightPress :Boolean  = false;
mc.onEnterFrame = function(){
        if (upPress && leftPress) mc.nextFrame()// переходим на следующий кадр
        if (downPress && rightPress) mc.prevFrame()// переходим на предыдущий кадр
        // во всех остальных случаях мувик будет стоять
}
// листнер
var listener :Object = new Object();
// обработчик нажатий клавиши
listener.onKeyDown = function() {
    switch (Key.getCode()) {
      case Key.UP :
          upPress = true;
      break;
      case Key.DOWN :
          downPress = true;
      break;
      case Key.LEFT :
          leftPress = true;
      break;
      case Key.RIGHT :
          rightPress = true;
      break;
    }
};
// обработчик отпускания клавиши сбрасываем флаг в 0, чтобы мувик остановился
listener.onKeyUp = function() {
    switch (Key.getCode()) {
      case Key.UP :
          upPress = false;
      break;
      case Key.DOWN :
          downPress = false;
      break;
      case Key.LEFT :
          leftPress = false;
      break;
      case Key.RIGHT :
          rightPress = false;
      break;
    }
};


alex001 16.06.2009 13:22

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

lexa2000lexa 16.06.2009 14:22

попробуйде вот так
Код AS1/AS2:

mc.stop();
var flag:Number = 0;
// определем функцию для мувика
 
function start_f(num:Number,f:Boolean) {
        mc.onEnterFrame = function() {
                if(f){
                        if (num) {
                                mc.nextFrame();// переходим на следующий кадр
                        } else {
                                mc.prevFrame();// переходим на предыдущий кадр
                        }
                }
                else{
                        if(flag%2==0){
                                if (num) {
                                        mc.nextFrame();// переходим на следующий кадр
                                } else {
                                        mc.prevFrame();// переходим на предыдущий кадр
                                }
                        }
                        }
                flag ++;
        };
}
var pres:Boolean = false;
var listener:Object = new Object();
// обработчик нажатий клавиши
listener.onKeyDown = function() {
        if(Key.getCode()==Key.LEFT || Key.getCode()==Key.RIGHT){//&&Key.getCode()==39){
                pres = true;
        }
        if((Key.getCode()==Key.UP) && pres){
                start_f(1,false);
        }
        else if(Key.getCode()==Key.UP){
                start_f(1,true);
                }
        if((Key.getCode()==Key.DOWN) && pres){
                start_f(0,false);
        }
        else if(Key.getCode()==Key.DOWN){
                start_f(0,true);
                }
};
listener.onKeyUp = function() {
        if(Key.getCode()==Key.LEFT || Key.getCode()==Key.RIGHT){
                pres = false;
        }
        switch (Key.getCode()) {
                case Key.UP :
                        delete mc.onEnterFrame;//убиваем нах
                        break;
                case Key.DOWN :
                        delete mc.onEnterFrame;//туда же
                        break;
        }
};
// вешаем листнер с обработчиками на клвиатуру
Key.addListener(listener);


alex001 16.06.2009 14:31

чтото тоже не пашет. работает клавиши вверх вниз. но при одновремменном нажатии вверх и налево происходит тоже самое что и при нажатии вверх. на самом деле или мне кажеться, но вроде при нажатии вниз он едит медленнее.вообщем - не пашет.

lexa2000lexa 16.06.2009 15:14

Вложений: 1
вот пример который работает

alex001 16.06.2009 16:29

спасибо, действительно работает.
а можно сделать так:
когда нажимеш вверх он играет на полной скорости, а начинает играть медленнее когда нажмеш лево/право а потом вверх. а можно чтобы нажмеш вверх а потом дожмеш лево/право и он начнет медленную скорость?
вообщем если нажмеш вверх он играет его на полной скорости и если ты будеш держать вверх нажатой и дожмеш лево/право он на это не реагирует.
если нажмеш лево/право и дожмеш вверх только тогда играет медленно.
а как сделать чтобы он играл на медленной скорости когда ты держишь вверх нажатой и дожмеш лево/право?

script_user 16.06.2009 21:55

флэш плохо так с клавишами работает. но кодом думаю можно. только я сам не знаю.

lexa2000lexa 17.06.2009 11:14

Цитата:

Сообщение от alex001 (Сообщение 828425)
спасибо, действительно работает.
а можно сделать так:
когда нажимеш вверх он играет на полной скорости, а начинает играть медленнее когда нажмеш лево/право а потом вверх. а можно чтобы нажмеш вверх а потом дожмеш лево/право и он начнет медленную скорость?
вообщем если нажмеш вверх он играет его на полной скорости и если ты будеш держать вверх нажатой и дожмеш лево/право он на это не реагирует.
если нажмеш лево/право и дожмеш вверх только тогда играет медленно.
а как сделать чтобы он играл на медленной скорости когда ты держишь вверх нажатой и дожмеш лево/право?

сделать можно, но ваш вопрос больше похож на ТЗ, а вы наверное сами понимаете, что это значит, и куду с такими проcьбами обращаться:quiet:

alex001 17.06.2009 12:06

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

KiL33 17.06.2009 12:51

Цитата:

сделать так как мне надо очень сложно/невозможно
Не сложнее похода в туалет..
Просто нужно иногда и свои мозги подключать.

alex001 17.06.2009 16:28

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

KiL33 17.06.2009 16:32

Цитата:

я начинающий програмист..эта 3d экшн
Начните с чего-то более простого..например тетрис..

alex001 17.06.2009 17:28

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

KiL33 17.06.2009 18:32

Цитата:

тетрис сложнее.
:D
Тогда я даже боюсь предположить, что вы там придумали.

alex001 17.06.2009 20:34

я сделаю в 3д максе дорогу в 3д поставлю камеру, и проанимирую ее. получиться видео в котором будет лететь вперед, прикреплю код, и идти он будет только когда нажато впред/назад. право/лево будет двигать перса. игра будет - 3д аллея. то видео из макса я импортирую как мув клип со своей timeline. (через видо инкодер).
в мув клипе я поставлю невидимые мув клипы они будут отвечать за препятствия.
я их буду хит тестить с мув клипом перса. вроде понятно как будет эта игра работать. помоему легче чем тетрис. я знаю как тетрис делать только кусочки при падении будут не переворачиваться, а если делать тетрис с "3 попало - исчезло" то они не будут исчезеть.


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

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