Как выровнять таймер объекта и счет в actionscript3.0 по центру - PullRequest
1 голос
/ 13 мая 2011

Я делаю соответствующую игру. Использую adobeFlash, actionScript3.0. Я понятия не имею, как выровнять счет таймера n по центру, когда игра включена .. n, где вставить эти кодировки ..

package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.display.StageAlign;
    import flash.utils.getTimer;
    import flash.utils.Timer;
    import flash.media.Sound;
    import flash.media.SoundChannel;

    public class MatchingGameObject10 extends MovieClip {
        // game constants
        private static const boardWidth:uint = 8;
        private static const boardHeight:uint = 8;
        private static const cardHorizontalSpacing:Number = 52;
        private static const cardVerticalSpacing:Number = 52;
        private static const boardOffsetX:Number = 300;
        private static const boardOffsetY:Number = 200;
        private static const pointsForMatch:int = 100;
        private static const pointsForMiss:int = -5;

        // variables
        private var firstCard:Card10;
        private var secondCard:Card10;
        private var cardsLeft:uint;
        private var gameScore:int;
        private var gameStartTime:uint;
        private var gameTime:uint;


        // text fields
        private var gameScoreField:TextField;
        private var gameTimeField:TextField;

        // timer to return cards to face-down
        private var flipBackTimer:Timer;

        // set up sounds
        var theFirstCardSound:FirstCardSound = new FirstCardSound();
        var theMissSound:MissSound = new MissSound();
        var theMatchSound:MatchSound = new MatchSound();

        // initialization function
        public function MatchingGameObject10():void {
            // make a list of card numbers
            var cardlist:Array = new Array();
            for(var i:uint=0;i<boardWidth*boardHeight/2;i++) {
                cardlist.push(i);
                cardlist.push(i);
            }

            // create all the cards, position them, and assign a randomcard face to each
            cardsLeft = 0;
            for(var x:uint=0;x<boardWidth;x++) { // horizontal
                for(var y:uint=0;y<boardHeight;y++) { // vertical
                    var c:Card10 = new Card10(); // copy the movie clip
                    c.stop(); // stop on first frame
                    c.x = x*cardHorizontalSpacing+boardOffsetX; // set position
                    c.y = y*cardVerticalSpacing+boardOffsetY;
                    var r:uint = Math.floor(Math.random()*cardlist.length); // get a random face
                    c.cardface = cardlist[r]; // assign face to card
                    cardlist.splice(r,1); // remove face from list
                    c.addEventListener(MouseEvent.CLICK,clickCard); // have it listen for clicks
                    c.buttonMode = true;
                    addChild(c); // show the card
                    cardsLeft++;
                }
            }

            // set up the score
            gameScoreField = new TextField();
            //gameScoreField = center;
            ////gameScoreField = center;
            addChild(gameScoreField);
            gameScore = 0;
            showGameScore();

            // set up the clock
            gameTimeField = new TextField();
            gameTimeField.x = 450;

            //gameTimeField = center;
            ////gameTimeField.stage = StageAlign.TOP;
            addChild(gameTimeField);
            gameStartTime = getTimer();
            gameTime = 0;
            addEventListener(Event.ENTER_FRAME,showTime);
        }

        // player clicked on a card
        public function clickCard(event:MouseEvent) {
            var thisCard:Card10 = (event.target as Card10); // what card?

            if (firstCard == null) { // first card in a pair
                firstCard = thisCard; // note it
                thisCard.startFlip(thisCard.cardface+2);
                playSound(theFirstCardSound);

            } else if (firstCard == thisCard) { // clicked first card again
                firstCard.startFlip(1);
                firstCard = null;
                playSound(theMissSound);

            } else if (secondCard == null) { // second card in a pair
                secondCard = thisCard; // note it
                thisCard.startFlip(thisCard.cardface+2);

                // compare two cards
                if (firstCard.cardface == secondCard.cardface) {
                    // remove a match
                    removeChild(firstCard);
                    removeChild(secondCard);
                    // reset selection
                    firstCard = null;
                    secondCard = null;
                    // add points
                    gameScore += pointsForMatch;
                    showGameScore();
                    playSound(theMatchSound);
                    // check for game over
                    cardsLeft -= 2; // 2 less cards
                    if (cardsLeft == 0) {
                        MovieClip(root).gameScore = gameScore;
                        MovieClip(root).gameTime = clockTime(gameTime);
                        MovieClip(root).gotoAndStop("gameover");
                    }
                } else {
                    gameScore += pointsForMiss;
                    showGameScore();
                    playSound(theMissSound);
                    flipBackTimer = new Timer(2000,1);
                    flipBackTimer.addEventListener(TimerEvent.TIMER_COMPLETE,returnCards);
                    flipBackTimer.start();
                }

            } else { // starting to pick another pair
                returnCards(null);
                playSound(theFirstCardSound);
                // select first card in next pair
                firstCard = thisCard;
                firstCard.startFlip(thisCard.cardface+2);
            }
        }

        // return cards to face-down
        public function returnCards(event:TimerEvent) {
            firstCard.startFlip(1);
            secondCard.startFlip(1);
            firstCard = null;
            secondCard = null;
            flipBackTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,returnCards);
        }

        public function showGameScore() {
            gameScoreField.text = "Score: "+String(gameScore);
        }

        public function showTime(event:Event) {
            gameTime = getTimer()-gameStartTime;
            gameTimeField.text = "Time: "+clockTime(gameTime);
        }

        public function clockTime(ms:int) {
            var seconds:int = Math.floor(ms/1000);
            var minutes:int = Math.floor(seconds/60);
            seconds -= minutes*60;
            var timeString:String = minutes+":"+String(seconds+100).substr(1,2);
            return timeString;
        }

        public function playSound(soundObject:Object) {
            var channel:SoundChannel = soundObject.play();
        }
    }
}

1 Ответ

0 голосов
/ 13 мая 2011

Если вы хотите (по горизонтали) выровнять DisplayObject в его родительском DisplayObject, просто сделайте что-то вроде этого:

child.x = (parent.width - child.width) / 2; 

В вашем примере кода это будет что-то вроде

gameTimeField.x = (this.width - gameTimeField.width) / 2;

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

...