Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 12.03.2012, 13:26
Feigi вне форума Посмотреть профиль Отправить личное сообщение для Feigi Найти все сообщения от Feigi
  № 1  
Ответить с цитированием
Feigi

Регистрация: Mar 2012
Сообщений: 29
По умолчанию Помогите разобраться с багом в игре змейка

Добрый день! Помогите разобраться с багом! Сижу над ним уже 12 часов. Баг в игре змейка. Всё работает хорошо. Кроме того, как змейка сталкивается с левой частью экрана- вылетает непонятная ошибка. Самое странное, что она вылетает после трейс game over , после чего по идее ничего не должно случаться. Error #1010: A term is undefined and has no properties

Заранее большое спасибо!

Код AS3:
package{
 
	import flash.display.Sprite;
	import flash.events.Event;
 
	[SWF(width=600,height=600,backgroundColor=0XD3D1D1,frameRate=5)]
 
 
	public class snakeGame extends Sprite{
 
		private var sprite:Sprite;
		private var game:Game;
 
		public function snakeGame(){ 
 
			game=new Game(stage);
 
		}
 
	}
}
Код AS3:
package{
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
 
	public class Game{
		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;
 
		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(0x0095D3);
			sprite.graphics.drawRect(0, 0, 600,600); 
			sprite.graphics.endFill();
 
			map=new Array(31);
			for (var i:int = 0; i < 31; i++) {
				map[i] = new Array(31);
			}
 
			stage.addEventListener(Event.ACTIVATE,onActivate);
 
			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;
				var segment:Snake_body=new Snake_body();
 
				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>590)
					game_over();
 
				if (map[(head.x-10)/20][(head.y-10)/20]==1)
					game_over();
 
				if (map[(head.x-10)/20][(head.y-10)/20]==2){
					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();
				}
				else{
					if (snake.length>0) map[(x_-10)/20][(y_-10)/20]=1;
					if (snake.length>0) map[(snake[0].x-10)/20][(snake[0].y-10)/20]=0;
					for(var i:int=snake.length-1;i>-1;i--){
						var tmp_x:int=snake[i].x;
						var tmp_y:int=snake[i].y;
						snake[i].x=x_;
						snake[i].y=y_;
						x_=tmp_x;
						y_=tmp_y;
					}
				}
			}
		}
 
		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 onDeactivate(e:Event):void {
			stage.removeEventListener(Event.DEACTIVATE,onDeactivate);
			stage.addEventListener(Event.ACTIVATE,onActivate);
			paused=true;
		}
		private function onActivate(e:Event):void {
			stage.removeEventListener(Event.ACTIVATE,onActivate);
			stage.addEventListener(Event.DEACTIVATE,onDeactivate);
			paused=false;
		}
 
		private function place_food():void{
			var x_:int;
			var y_:int;
 
			do{
				x_= Math.round((Math.random()*29));
				y_= Math.round((Math.random()*29));
			}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 game_over():void{
			paused=true;
			head.removeEventListener(Event.ENTER_FRAME,onEnterFrame);
			stage.removeEventListener(KeyboardEvent.KEY_DOWN, reactToKey);
			trace("game over");
 
		}
 
	}
}


Последний раз редактировалось Feigi; 12.03.2012 в 14:09. Причина: форматирование кода
Создать новую тему   Часовой пояс GMT +4, время: 18:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.