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

Godwarlock 04.02.2015 17:32

Привязать время к двигающемуся объекту
 
Есть объект который двигается по сцене. В общем то всё нормально, если играть в обычном окне. Но если увеличить окно, то начинается проблема с производительностью. Читал что нужно создать что-то вроде тика, который отсчитывает кадры в секунду и нужно умножить это время на скорость.

Код AS3:

object.x += 3;

Подскажите как создать это время)

callme 04.02.2015 18:27

Код AS3:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            addEventListener(Event.ENTER_FRAME, enterFrame);
            _time = getTimer();
        }
 
        private function enterFrame(e:Event):void
        {
            var newTime:Number = getTimer();
            var delta:Number = newTime - _time;
            _time = newTime;
 
            x += delta * speed;
        }
 
        private var _time:Number;
    }
}


Godwarlock 04.02.2015 19:05

Не, что-то не то. У меня теперь объект двигается с нереальной скоростью

callme 04.02.2015 19:08

speed сделай поменьше

Godwarlock 04.02.2015 19:11

Сделал на единицу -все равно слишком быстро получается. А ниже единицы если поставить, примерно 0,5 то объект вообще не двигается

callme 04.02.2015 19:16

Код AS3:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            addEventListener(Event.ENTER_FRAME, enterFrame);
            _time = getTimer();
        }
 
        private function enterFrame(e:Event):void
        {
            var newTime:Number = getTimer();
            var delta:Number = newTime - _time;
            _time = newTime;
 
            x += delta * speed;
        }
 
        override public function get x():Number
        {
            return _x;
        }
 
        override public function set x(value:Number):void
        {
            _x = value;
            super.x = _x;
        }
 
        private var _x:Number = 0;
        private var _time:Number;
    }
}


Godwarlock 04.02.2015 19:28

у меня двигается объект, а не x, поэтому когда я подставляю

Код AS3:

 override public function get object():Number
        {
            return _x;
        }
 
        override public function set object(value:Number):void
        {
            _x = value;
            super.object = _x;
        }

Выдаёт ошибку

callme 04.02.2015 19:32

Код AS3:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            addEventListener(Event.ENTER_FRAME, enterFrame);
            _time = getTimer();
        }
 
        private function enterFrame(e:Event):void
        {
            var newTime:Number = getTimer();
            var delta:Number = newTime - _time;
            _time = newTime;
 
            _x += delta * speed;
            x = _x;
        }
 
        private var _x:Number = 0;
        private var _time:Number;
    }
}


Godwarlock 04.02.2015 19:49

Не, все равно объект быстро двигается, ничего не изменилось

callme 04.02.2015 20:19

Потести вот этот код. Если все равно быстро, сделай _speed = 0.001

Код AS3:

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.utils.getTimer;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            _object = new Bitmap(new BitmapData(100, 100, false, 0xffcc33));
            addChild(_object);
 
            addEventListener(Event.ENTER_FRAME, enterFrame);
            _time = getTimer();
        }
 
        private function enterFrame(e:Event):void
        {
            var newTime:Number = getTimer();
            var delta:Number = newTime - _time;
            _time = newTime;
 
 
            _x += delta * _speed;
          _object.x = _x;
        }
 
        private var _x:Number = 0;
        private var _time:Number;
        private var _speed:Number = 0.01;
        private var _object:Bitmap;
    }
}



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

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