Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3 TimerEvents:_Flash_Actionscript 3_Timer - Fatal编程技术网

Flash AS3 TimerEvents:

Flash AS3 TimerEvents:,flash,actionscript-3,timer,Flash,Actionscript 3,Timer,在通过计时器事件添加snake的部分时遇到问题 package { import flash.display.Sprite; import flash.events.KeyboardEvent; import flash.events.TimerEvent; import flash.ui.Keyboard; import flash.utils.Timer; import flash.display.MovieClip; public

在通过计时器事件添加snake的部分时遇到问题

package {

    import flash.display.Sprite;
    import flash.events.KeyboardEvent;
    import flash.events.TimerEvent;
    import flash.ui.Keyboard;
    import flash.utils.Timer;
    import flash.display.MovieClip;

    public class Snake extends MovieClip{

        private const SPEED         :uint = 50;//lower = faster
        private const snakeAttach   :uint = 400;//lower = faster
        private const DIM           :int = 71; //keep this number uneven to have the snake starting in the middle
        private const INITIAL_SIZE  :int = 3; //keep this lower then DIM/2

        private var stopped         :Boolean;
        private var left            :Boolean;
        private var right           :Boolean;
        private var up              :Boolean;
        private var down            :Boolean;
        private var size            :Number;
        private var food            :Sprite;
        private var tmr             :Timer;
        private var addSnake        :Timer;
        private var curI            :Number;
        private var curJ            :Number;
        private var snake           :Array;
        private var grid            :Array;

        public function Snake(){
            size = stage.stageWidth / DIM; //change grid size
            curI = curJ = Math.floor(DIM * 0.5); //change grid size

            initSnake();
            fillGrid();


            addSnake = new Timer(snakeAttach);
            addSnake.addEventListener(TimerEvent.TIMER,placeFood);
            addSnake.start();

            tmr = new Timer(SPEED);
            tmr.addEventListener(TimerEvent.TIMER,move);
            tmr.start();

            stage.addEventListener(KeyboardEvent.KEY_DOWN,changeDir);
        }

        private function fillGrid():void{  //grid
            grid = Make2DArray();

            for (var i:uint = 0; i < DIM; i++){
                for (var j:uint = 0; j < DIM; j++){
                    var sp:Sprite = new Sprite();
                    sp.graphics.beginFill(0xF0F0F0);
                    sp.graphics.lineStyle(1,0xF5F5F5);
                    sp.graphics.drawRect(0, 0, size  - 1, size - 1);
                    sp.x = i * size;
                    sp.y = j * size;
                    addChild(sp);
                    grid[i][j] = sp;
                }
            }   
        }

        private function Make2DArray():Array{   //for the grid
            var a:Array = new Array(DIM);
            for(var i:uint = 0; i < a.length; i++){
                a[i] = new Array(DIM);
            }   
            return a;
        }

        private function initSnake():void{ //initialises the snake
            var center:Number = Math.floor(DIM * 0.5) * size;

            snake = new Array(INITIAL_SIZE);

            for (var i:uint = 0; i < INITIAL_SIZE; i++){
                var sp:Sprite = makeItem();      //adds a body part of makeItem 
                sp.x = center;
                sp.y = center + i * size;
                addChild(sp); //adds to the stage
                snake[i] = sp;  //sets the index to one
            }

            snake.reverse();
        }

        private function makeItem(c:uint = 0):Sprite{  //graphics for item
            var s:Sprite = new Sprite(); 
            s.graphics.beginFill(c);
            s.graphics.lineStyle(2,0x333333);
            s.graphics.drawRect(0, 0, size, size);
            return s;
        }

        private function placeFood(event:TimerEvent):void{   
            var rndI:uint = Math.floor(Math.random() * DIM);  //sets a random integer based on the the floor
            var rndJ:uint = Math.floor(Math.random() * DIM);

            var rndX:Number = grid[rndI][rndJ].x; // sets a grid position for the food item to go
            var rndY:Number = grid[rndI][rndJ].y;

            if (food != null) removeChild(food);  //if there is food on the grid removes the food from the board 

            food = makeItem(Math.random() * 0xFFFFFF);// random color
            food.x = rndX;
            food.y = rndY;

            addChild(food); //adds the food to the board

            for (var i:uint = 0; i < snake.length; i++){
                if (rndY == snake[i].y && rndX == snake[i].x){ 

                }
            } 
        }

        private function move(e:TimerEvent):void{
            if (left){
                curI -= 1;
            }else if (right){
                curI += 1;
            }
            if (up){
                curJ -= 1;
            }else if (down){
                curJ += 1;
            }

            if (left || right || up || down){
                var s:Sprite = makeItem();

                if (curI > DIM - 1) curI = 0;
                if (curJ > DIM - 1) curJ = 0;

                if (curI < 0) curI = DIM - 1;
                if (curJ < 0) curJ = DIM - 1;

                s.x = grid[curI][curJ].x;
                s.y = grid[curI][curJ].y;

                addChild(s);
                snake.push(s);


                 if (Math.floor(s.x) == Math.floor(food.x) && Math.floor(s.y) == Math.floor(food.y) ){ 
                 //placeFood(); } 
                 else if((tmr.currentCount % 10) > 0) { removeChild(snake[0]); snake.shift(); }
            }

        }

        private function changeDir(e:KeyboardEvent):void{
            if(e.keyCode == Keyboard.LEFT)  {if (!right){left = true;  up = false; down = false; right = false;}}
            if(e.keyCode == Keyboard.UP)    {if (!down) {left = false; up = true;  down = false; right = false;}}
            if(e.keyCode == Keyboard.RIGHT) {if (!left) {left = false; up = false; down = false; right = true;}}
            if(e.keyCode == Keyboard.DOWN)  {if (!up)   {left = false; up = false; down = true;  right = false;}}
        }
    }
}
包{
导入flash.display.Sprite;
导入flash.events.KeyboardEvent;
导入flash.events.TimerEvent;
导入flash.ui.Keyboard;
导入flash.utils.Timer;
导入flash.display.MovieClip;
公共级Snake扩展MovieClip{
私有常量速度:uint=50;//更低=更快
私有const snakeAttach:uint=400;//更低=更快
私有const Dime: int=71;/ /保持这个数目不均匀,使蛇从中间开始
private const INITIAL_SIZE:int=3;//保持此值低于DIM/2
私有变量:布尔值;
私有变量左:布尔;
私有变量权:布尔;
private-var-up:布尔型;
私有变量:布尔值;
私有变量大小:数字;
私人食品:雪碧;
专用var-tmr:定时器;
私有变量addSnake:计时器;
私有var-curI:数字;
私有变量curJ:编号;
私有变量:数组;
私有var网格:数组;
公共职能部门(){
size=stage.stageWidth/DIM;//更改网格大小
curI=curJ=Math.floor(DIM*0.5);//更改网格大小
initSnake();
fillGrid();
addSnake=新计时器(snakeAttach);
addSnake.addEventListener(TimerEvent.TIMER,placeFood);
addSnake.start();
tmr=新定时器(速度);
tmr.addEventListener(TimerEvent.TIMER,move);
tmr.start();
stage.addEventListener(KeyboardEvent.KEY_DOWN,changeDir);
}
私有函数fillGrid():void{//grid
grid=Make2DArray();
对于(变量i:uint=0;iDIM-1)居里=0;
如果(curJ>DIM-1)curJ=0;
如果(居里<0)居里=DIM-1;
如果(curJ<0)curJ=DIM-1;
s、 x=栅格[curI][curJ].x;
s、 y=栅格[curI][curJ].y;
addChild(s);
蛇.推(s);;
如果(数学地板(s.x)=数学地板(food.x)和&数学地板(s.y)=数学地板(food.y)){
//placeFood();}
如果((tmr.currentCount%10)>0){removeChild(snake[0]);snake.shift();}
}
}
私有函数changeDir(e:KeyboardEvent):无效{
if(e.keyCode==Keyboard.LEFT){if(!right){LEFT=true;up=false;down=false;right=false;}}
if(e.keyCode==Keyboard.UP){if(!down){left=false;UP=true;down=false;right=false;}}
if(e.keyCode==Keyboard.RIGHT){if(!left){left=false;up=false;down=false;RIGHT=true;}}
if(e.keyCode==Keyboard.DOWN){if(!up){left=false;up=false;DOWN=true;right=false;}}
}
}
}

您需要向处理TimerEvent的任何函数添加事件参数

private function placeFood(event:TimerEvent):void {

如果您在模型-视图-控制器框架中拥有它,那就太好了。你有很多事情要做