Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос про раскадровку (http://www.flasher.ru/forum/showthread.php?t=139293)

envy 27.04.2010 18:56

Код AS3:

package {
 import flash.text.*;
 import flash.events.*;
 import flash.ui.*;
 import flash.utils.Timer;
 import flash.display.*;
  public class main_game extends MovieClip {
          public var manX, manY : int;
          public var speed = 3;
 
          //---------------------------------------
        public function main_game() {
 
 
        dude.stop();
 
 
        addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }
        //----------------------------------------
        private function onAddedToStage(event:Event) {
                this.stage.stageFocusRect = false;
            stage.focus = this;
 
                  stage.addEventListener(MouseEvent.CLICK, onClick);
 
        }
        //-------------------------
 
        //-----------------------------------------------
        function onClick(e:MouseEvent) { //нажатие кнопки - запомнили
                dude.stop();
                manX = e.stageX;
                manY = e.stageY; //запомнила координаты
                stage.addEventListener(Event.ENTER_FRAME, render)
        }
 
 
        //--------------------------------------------------       
 
 
        //-----------------------------------------------
        function render(e:Event) { //
                //************
                var moires1 =  [0, 22.6, 66.6, 111.6, 156.6, 202.6, 247.6, 294.6];
                var moires2 =  [22.5, 66.5, 111.5, 156.5, 202.5, 247.5, 294.5, 340.5];
              var radians = - Math.atan2(dude.y-manY, dude.x-manX);
                var degrees = radians*180/Math.PI+180;
                //trace (degrees);
                var angle = 1;
                var destX, destY :int;
                var a: String;
 
                for (var i=0; i<=moires1.length; ++i) {
                        if (degrees>=moires1[i] && degrees<=moires2[i]) {angle = i}
                        else if (degrees>340.5 && degrees<=360) {angle = 0 }
 
                }
                var j = 0;
                var offsetX = manX - dude.x;
                var offsetY = manY - dude.y;
                if (offsetX > 0) {destX = 1} else {destX = -1} //направление + или -
                if (offsetY > 0) {destY = 1} else {destY = -1}
 
                //
                graphics.lineStyle(0, 0)
                graphics.moveTo(dude.x, dude.y)
                graphics.lineTo(manX, manY);
                //
 
 
                /*trace("____________")
                trace("x=",dude.x, "mx=",manX, "offsetX = ", offsetX);
                trace("y=",dude.y, "mx=",manY, "offsety = ", offsetY);
                trace("____________")*/

 
                a = angle + "1";
                //trace(a);
 
                if (Math.abs(offsetX) > speed) {
                        dude.gotoAndPlay(a);
                        dude.play();
                        /*if (dude.currentLabel.charAt(1) == "7") {
                                dude.gotoAndPlay(a);
                                dude.play();
                        }*/

                        //trace(dude.currentLabel);
                        dude.x = dude.x + speed * destX; //переместили
                        offsetX = offsetX - speed * destX;
                }
 
                if (Math.abs(offsetY)> speed) {
                        dude.play();                       
                        dude.y = dude.y + speed * destY;
                        offsetY = offsetY - speed * destY;
                }
 
 
 
                //stage.removeEventListener(Event.ENTER_FRAME, render); 
                        }
        //--------------------------------------------------       
 
  }
}


Вот весь класс, он один

Psycho Tiger 27.04.2010 18:59

Цитата:

А потому что это свойство
Свойства CurrentFrame у MovieClip нету. currentFrame же можно всегда переопределить.

envy 27.04.2010 19:20

Точнее, он сначала доводит до нужной точки персонажа, а потом уже запускает его анимацию

BlooDHounD 27.04.2010 19:29

Psycho Tiger, и как вы переопределением свойства превратите его в метод?

Psycho Tiger 27.04.2010 20:15

Цитата:

Сообщение от BlooDHounD (Сообщение 904221)
Psycho Tiger, и как вы переопределением свойства превратите его в метод?

Пора брать отпуск мне, да, никак. А так хочется перегрузку =(

envy 27.04.2010 20:18

и все же, может, поможете? (

Psycho Tiger 27.04.2010 20:35

envy, у вас проблема в том что человечек не хочет на нужный кадр вставать, верно?
Вам что нужно, чтобы по клику человечек что сделал? Встал на своей временной шкале на нужный кадр из 360 или что?
В первом посте у вас проблема была в том, что вы currentFrame писали с большой буквы, как и gotoAndStop. Они пишутся с маленькой буквы, это важно.

envy 27.04.2010 20:52

нет, человечек встает на нужный кадр. И остается на нем, как будто я использовала gotoAndStop().
dude.gotoAndPlay(5); - все вроде правильно написала. Stop() нигде больше нет.

Psycho Tiger 27.04.2010 21:00

У вас тут дело вот в чем:
render вызывается каждый кадр (потому что повешен на ENTER_FRAME)
Код AS3:

dude.gotoAndPlay(a);

вызывается там же, т.е. каждый кадр. И в итоге на каждом следующем кадре человечек хочет проиграться, встать на следующий - а вы его бац, и снова
Код AS3:

dude.gotoAndPlay(a);

и он вновь встаёт на кадр a. То есть он проигрывается, проблема в постоянном вызове gotoAndPlay

Котяра 27.04.2010 21:06

Цитата:

Сообщение от i.o. (Сообщение 904187)
mickfallout, дак там с большой буковки CurrentFrame прописано у автора...

наследие C#,C++ или Java наверное..хотя сомневаюсь))))


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

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