формула для определения обозначения точки с учетом переменной - PullRequest
0 голосов
/ 04 августа 2011

У меня есть игра, в которой подбрасывается приманка, определяемая переменной измерителя мощности. Когда счетчик полон, он возвращает переменную 1, когда половина 0,5, а когда низко около 0, как я могу использовать это, чтобы определить, насколько далеко моя "приманка будет выброшена" на экран? я пытался, однако, что значение X не будет соответствовать моему положению удилища, и когда точка будет решена, мне придется переместить свою приманку в эту точку и остановиться.

_destinationY = Math.abs (_maxY - (_maxY * power));

_destinationX = Math.abs (_maxX - (_maxX * power));

package  
{
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.geom.Point;
    /**
     * ...
     * @author ...
     */
    public class Bullet extends MovieClip
    {
        //variables
        private var _stageRef:Stage;
        private var _maxX:Number = 1024;
        private var _maxY:Number = 768;
        private var _destinationY:Number;
        private var _destinationX:Number;
        private var _speedVector:Point = new Point();
        private var _moveFactor:Number = 0.9;
        public var  hit:MovieClip;
        private var _fishes:Vector.<HFish> = new Vector.<HFish>;
        private var _bulletLengthVector:Point = new Point();
        private var awpSnd:awpSound
        private var _power:Number = 1;

        public function Bullet(stageRef:Stage,x:Number,y:Number,targetPoint:Point,power:Number) 
        {
            this.x = x;
            this.y = y;
            _stageRef = stageRef;
            _maxX = _stageRef.stageWidth;
            _maxY = _stageRef.stageHeight;

            //movement
            _destinationY = Math.abs(_maxY - (_maxY * power));
            _destinationX = Math.abs(_maxX - (_maxX * power));
            trace ("landing at Y " + _destinationY);
            trace ("landing at X " + _destinationX);
            if (_destinationY > _maxY)
                _destinationY = _maxY;
            if (_destinationX > _maxX)
                _destinationX = _maxX;


            addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
            //determine bullet moving speed

        }

        private function loop(e:Event) : void
        {

            //move bullet
            this.x += _speedVector.x;
            this.y += _speedVector.y;
            //remove bullet bound check
            if (this.x > _maxX || this.x < 0)
                removeSelf();
                else if (this.y > _maxY || this.y < 0)
                removeSelf();

        }

        private function removeSelf() : void
        {
            removeEventListener(Event.ENTER_FRAME, loop);

            if (stage.contains(this))
                stage.removeChild(this);
        }


    }

}

скриншот игры. enter image description here

1 Ответ

0 голосов
/ 04 августа 2011

Не совсем уверен, почему вы используете такой сложный форум для этого. Если вы просто хотите, чтобы человек мог достичь значений maxX и maxY, умножьте maxX и maxY на общую мощность, поскольку диапазон мощности составляет 0-1. Таким образом, если ваш уровень мощности 0,7, то бросок будет 70 процентов от максимального расстояния. Полегче, если я не пропущу что-то еще.

Обновление

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

http://www.untoldentertainment.com/blog/2008/12/08/as3-helper-class-findangle/

Так что, в основном, просто создайте новый объект Point, установите X / Y на X / Y вашей приманки, затем наложите второй объект Point, установите X / Y на X / Y вашего стержня и затем передайте их к этому классу помощника. Класс найдет угол в РАДИАНАХ. Убедитесь, что вы преобразовали их в градусы, поскольку проигрыватель Flash использует градусы для поворота экранного объекта. Вы можете сделать это также внутри вспомогательного класса или вручную:
var degrees:Number = radians * 180 / Math.PI;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...