Flash Game Score не работает AS3, пожалуйста, помогите? - PullRequest
0 голосов
/ 24 ноября 2011

Итак, я создаю игру, и все, что я хотел добавить, это счетчик, который постоянно увеличивается до тех пор, пока игрок не проиграет.

Я создал свой класс оценки, и он выглядит так:

package 
{

    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.text.TextField;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;

    public class Score extends MovieClip
    {
        public var second:Number = 0;
        public var timer:Timer = new Timer(10);
        private var stageRef:Stage;


        public function Score(stageRef:Stage)
        {
            x = 537.95;
            y = 31.35;
            this.stageRef = stageRef;
            timer.addEventListener(TimerEvent.TIMER, clock);
            timer.start();

        }

        function clock(evt:TimerEvent):void
        {
            second += 1;
            scoreDisplay.text = String("Score: " +second);
        }

    }
}

и это мой класс двигателя, который добавляет его на сцену:

package  {
//list of our imports these are classes we need in order to
//run our application.
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;

public class Engine extends MovieClip{

    private var enemyList:Array = new Array();
    private var ourBoat:Boat;
    private var score:Score;


    public function Engine() : void{
        //create an object of our ship from the Ship class
        ourBoat = new Boat(stage);
        score = new Score(stage);
        //add it to the display list
        stage.addChild(ourBoat);
        stage.addChild(score);

Так что это создает таймер на сцене и непрерывно увеличивается, но когда я компилирую, я не получаю ошибок, и мой тиммер по какой-то причине не работает, он просто отображает случайные числа, пожалуйста, помогите! Если есть лучший способ сделать это, пожалуйста, просветите меня.

Ответы [ 3 ]

0 голосов
/ 24 ноября 2011

Во-первых, вам не нужно передавать класс stage дочерним элементам MovieClip, после их добавления к этапу вы можете получить доступ к этапу с помощью свойства this.stage.

Во-вторых, задержка класса TimerПараметр описан в документации следующим образом:

delay: Number - Задержка между событиями таймера в миллисекундах.Задержка ниже 20 миллисекунд не рекомендуется.Частота таймера ограничена 60 кадрами в секунду, а это означает, что задержка менее 16,6 миллисекунд вызывает проблемы во время выполнения.

Поэтому, если вы действительно отслеживаете секунды, ваш таймер должен быть:

public var timer:Timer = new Timer(1000);

РЕДАКТИРОВАТЬ:

Вот как я мог бы реализовать счет, который вы описали в комментарии:

public class Score extends MovieClip
{
    public var second:Number = 0;

    var pointsPerSecond : Number = 10;

    private var stageRef:Stage;


    public function Score(stageRef:Stage)
    {
        x = 537.95;
        y = 31.35;
        this.stageRef = stageRef;
        this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }

    function clock(evt:Event):void
    {
        second += pointsPerSecond/stage.frameRate; // Note that if the game is running slow (flash cant keep the frameRate you asked for), the score will also grow slowly
        scoreDisplay.text = String("Score: " +second);
    }
}
0 голосов
/ 25 ноября 2011

Вы уверены, что ScoreDisplay достаточно велик?Ваш номер будет увеличиваться на 100 каждую секунду, и если ваше текстовое поле имеет длину всего 2 символа, вы увидите случайные числа.

0 голосов
/ 24 ноября 2011

Я предполагаю, что ScoreDisplay - это именованный объект на сцене. Может оказаться полезным добавлять trace () в скрипт в каждую вызываемую функцию. Таким образом, вы можете увидеть, какие из них называются правильно. Например, трассировка («Двигатель установлен»); и трассировка («Получено событие таймера»); скажет, правильно ли создается ваш класс. Если это так и триггер не работает, вы знаете, что ваша проблема находится между этими двумя точками. Затем переходите к середине выполнения кода, пока не найдете проблему.

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

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