Показать сообщение отдельно
Старый 13.03.2012, 16:55
Feigi вне форума Посмотреть профиль Отправить личное сообщение для Feigi Найти все сообщения от Feigi
  № 3  
Ответить с цитированием
Feigi

Регистрация: Mar 2012
Сообщений: 29
Перестаёт реагировать впринципе. Вообще-то это кнопка должна отреагировать только один раз за игру (кнопка рестарт гейм).
Код AS3:
	private function game_over_func():void{
			paused=true;
			pause_button.removeEventListener(MouseEvent.MOUSE_UP,pause_game);
			//head.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
			//stage.removeEventListener(KeyboardEvent.KEY_DOWN, reactToKey);
			//trace("game over");
 
			game_over=new Game_over();
			game_over.x=300;
			game_over.y=100;
			sprite.addChild(game_over);
 
			new_game=new New_game();
			new_game.x=290;
			new_game.y=200;
			sprite.addChild(new_game);
			new_game.addEventListener(MouseEvent.MOUSE_UP,onBtnUp);	
		}
 
		private function onBtnUp(event:MouseEvent):void{
			new_game.removeEventListener(MouseEvent.MOUSE_UP, onBtnUp);	
			var myEvent:MyEvent;
			//we set the type of the event we want to dispatch.
			myEvent = new MyEvent( "onEndGame" );
			//We set the customMessage for display
			myEvent.customMessage = "Games is finnished...!";
			//Finally we dispatch to notice the app one contact was removed
			dispatchEvent(myEvent)
		}
Что странно, есть ещё пара кнопок (плей, пауз), которые написаны один к одному также, и с ними нет проблем.

Вот весь код игры.

Код AS3:
package{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
 
	public class Game extends EventDispatcher{
		private var head:Snake_head;
		private var map:Array;
		private var turnQueue:Array;
		private var direction:uint=40;
		private var sprite:Sprite;
		private var stage:Stage;
		private var paused:Boolean=true;
		private var snake:Vector.<Snake_body>;
		private var bonus:Bonus;
		private var sun:Sunny;
		private var palm:Palm;
		private var score:int=0;
		private var myText:TextField;
		private var myFormat:TextFormat;
		private var play_pause:Play_pause;
		private var pause_button:Pause_button;
		private var play_button:Play_button;
		private var game_over:Game_over;
		private var new_game:New_game;
 
 
		public function Game(stage:Stage){
			bonus = new Bonus();
			snake = new Vector.<Snake_body>();
			this.stage=stage;
			sprite=new Sprite();
			stage.addChild(sprite);
			sprite.graphics.lineStyle(6,0x000000);
			sprite.graphics.beginFill(0xFFFFFF);
			sprite.graphics.drawRect(0, 0, 600,600); 
			sprite.graphics.endFill();
 
 
			sprite.graphics.lineStyle(6,0x000000);
			sprite.graphics.beginFill(0xABDCF8);
			sprite.graphics.drawRect(0, 0, 600,560); 
			sprite.graphics.endFill();
 
			sun=new Sunny();
			sprite.addChild(sun);
			sun.x=100;
			sun.y=100;
			sun.scaleX = .5;
			sun.scaleY = .5;
			sun.alpha=0.5;
			sun.stop();
 
			palm=new Palm();
			sprite.addChild(palm);
			palm.x=260;
			palm.y=514.5;
			palm.scaleX = .88;
			palm.alpha=0.7;
			palm.stop();
 
			play_pause = new Play_pause();
			play_pause.x=100;
			play_pause.y=580;
			sprite.addChild(play_pause);
 
			play_button=new Play_button();
			play_button.x=180;
			play_button.y=580;
			sprite.addChild(play_button);
			play_button.addEventListener(MouseEvent.MOUSE_UP,un_pause_game);
 
			myText = new TextField();
			myText.width = 80;
			myText.height = 25;
			myText.border = true;
			myText.background= true;
			myText.backgroundColor= 0xBFC7CA;
			myText.x = 500;
			myText.y = 567;
			myText.selectable = false;
			myFormat = new TextFormat("Arial", 20, 0x000000, true);
			myText.defaultTextFormat = myFormat;
			sprite.addChild(myText);
			myText.text = "0";
 
 
 
			map=new Array(31);
			for (var i:int = 0; i < 31; i++) {
				map[i] = new Array(31);
			}
 
			turnQueue=new Array();
 
			stage.addEventListener(KeyboardEvent.KEY_DOWN, reactToKey);
			head=new Snake_head;
			sprite.addChild(head);
			head.x=310;
			head.y=10;
			map[15][0]=head;
			place_food();
			head.addEventListener(Event.ENTER_FRAME,onEnterFrame);
 
 
		}
 
		private function onEnterFrame(event:Event):void{
			if (!paused){
				var x_:int=head.x;
				var y_:int=head.y;
 
				if (turnQueue.length!=0)
					direction=turnQueue.shift();
 
				if (direction==37){
					head.x-=20;
				}
				if (direction==38){
					head.y-=20;
				}
				if (direction==39){
					head.x+=20;
				}
				if (direction==40){
					head.y+=20;
				}
				if(head.x<10 || head.x>590 || head.y<10 || head.y>550){
					sprite.removeChild(head);
					moveSnake(x_,y_);
					game_over_func();
					return;
				}
 
				if (map[(head.x-10)/20][(head.y-10)/20]==1){
					moveSnake(x_,y_);
					game_over_func();
					return;
				}
 
				if (map[(head.x-10)/20][(head.y-10)/20]==2){//food..
					var segment:Snake_body=new Snake_body();
					sprite.removeChild(bonus);
					segment.x=x_;
					segment.y=y_;
					map[(x_-10)/20][(y_-10)/20]=1;
					snake.push(segment);
					sprite.addChild(segment);
					place_food();
					score+=10;
					myText.text=score.toString();
				}
				else
					moveSnake(x_,y_);
			}
		}
 
		private function moveSnake(x_:int,y_:int):void{
			if (snake.length>0){ 
				map[(snake[0].x-10)/20][(snake[0].y-10)/20]=0;
				map[(x_-10)/20][(y_-10)/20]=1;
				var segment:Snake_body=new Snake_body();
				segment.x=x_;
				segment.y=y_;
				map[(x_-10)/20][(y_-10)/20]=1;
				snake.push(segment);
				sprite.addChild(segment);
				sprite.removeChild(snake[0]);
				snake.shift();
			}
		}
		private function reactToKey(event:KeyboardEvent):void{
			var keyCode:uint=event.keyCode;
			if ( Math.abs(direction - keyCode)!=2 &&
				 keyCode > 36 && keyCode < 41 && keyCode!=turnQueue[turnQueue.length-1]){ 
				 turnQueue.push(keyCode);
 
			 } // arrow keys pressed (37 = left, 38 = up, 39 = right, 40 = down)... 
 
		}
 
		private function place_food():void{
			var x_:int;
			var y_:int;
 
			do{
				x_= Math.round((Math.random()*29));
				y_= Math.round((Math.random()*27));
			}while(map[x_][y_]==1 || (x_*20+10==head.x &&  y_*20+10==head.y) );
			bonus.x=x_*20+10;
			bonus.y=y_*20+10;
			map[x_][y_]=2;
			sprite.addChild(bonus);
		}
 
		private function pause_game(event:MouseEvent):void{
			paused=true;
			sun.stop();
			palm.stop();
			pause_button.removeEventListener(MouseEvent.MOUSE_UP,pause_game);
			sprite.removeChild(pause_button);
			play_button=new Play_button();
			play_button.x=180;
			play_button.y=580;
			sprite.addChild(play_button);
			play_button.addEventListener(MouseEvent.MOUSE_UP,un_pause_game);
		}
 
		private function un_pause_game(event:MouseEvent):void{
			stage.focus=stage;
			play_button.removeEventListener(MouseEvent.MOUSE_UP,un_pause_game);
			sprite.removeChild(play_button);
			pause_button=new Pause_button();
			pause_button.x=180;
			pause_button.y=580;
			sprite.addChild(pause_button);
			pause_button.addEventListener(MouseEvent.MOUSE_UP,pause_game);
			sun.play();
			palm.play();
			paused=false;
		}	
 
		private function game_over_func():void{
			paused=true;
			pause_button.removeEventListener(MouseEvent.MOUSE_UP,pause_game);
			//head.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
			//stage.removeEventListener(KeyboardEvent.KEY_DOWN, reactToKey);
			//trace("game over");
 
			game_over=new Game_over();
			game_over.x=300;
			game_over.y=100;
			sprite.addChild(game_over);
 
			new_game=new New_game();
			new_game.x=290;
			new_game.y=200;
			sprite.addChild(new_game);
			new_game.addEventListener(MouseEvent.MOUSE_UP,onBtnUp);	
		}
 
		private function onBtnUp(event:MouseEvent):void{
			new_game.removeEventListener(MouseEvent.MOUSE_UP, onBtnUp);	
			var myEvent:MyEvent;
			//we set the type of the event we want to dispatch.
			myEvent = new MyEvent( "onEndGame" );
			//We set the customMessage for display
			myEvent.customMessage = "Games is finnished...!";
			//Finally we dispatch to notice the app one contact was removed
			dispatchEvent(myEvent)
		}
	}
}
Код AS3:
package{
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
 
	[SWF(width=600,height=600,backgroundColor=0XD3D1D1,frameRate=5)]
 
 
	public class snakeGame extends Sprite{
		private var stage_:Stage;
		private var sprite:Sprite;
		private var game:Game;
		public function snakeGame(){ 
			this.stage_=stage;
			game=new Game(stage_);
			game.addEventListener( MyEvent.ON_END_GAME,endGame);
 
		}
 
		private function endGame(event:MyEvent):void{
			game=new Game(stage_);
		}
	}
}
Код AS3:
package{
	import flash.events.Event;
	public class MyEvent extends Event{
		public static const ON_END_GAME:String = "onEndGame";
		private var myEvent:MyEvent;
		public var customMessage:String = "";
 
		public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
			//we call the super class Event
			super(type, bubbles, cancelable);
		}
 
 
	}
}
Добавлено через 55 минут
Спасибо, уже разобралась. Был баг в коде, не связанный с кнопкой. Исправила.