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

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

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

Регистрация: Oct 2012
Сообщений: 191
Question hitTest для игры, а также упрощенная версия моего кода

Здравствуйте! Вопрос будет довольно обширный и всесторонний...
Начну с кода. Оставляйте пожалуйста примечания (как можно было бы сделать лучше), если такие возникнут...А они возникнут!!!

Main.as
Код AS3:
package {
 
	import flash.display.*;
	import flash.events.*;
 
	public class Main extends MovieClip {
			var player:Sprite;
			var line:Sprite;
			var lineArray:Array = new Array();
					var right:Boolean;
					var left:Boolean;
					var stay:Boolean;
					var speed:int = 5;
 
		function Main() {
			createPlayer() //Создаем игрока
			CONTROLER() //Управление для игрока
		}
 
		function createPlayer() {
			player = new Sprite();
				player.graphics.lineStyle(1,0xFF0000,1);
				player.graphics.drawCircle(0,0,16);
			player.x = 200;
			player.y = 200;
			addChild(player);
 
					var numRotation:int = 0;
			for(var i = 0; i <= 7; i++) {
				line = new Sprite();
					line.graphics.lineStyle(1,0x000000,1);
					line.graphics.lineTo(0,200);
				line.x = player.x;
				line.y = player.y;
				addChild(line);
 
				lineArray.unshift(line);
				lineArray[0].rotation += numRotation;
				numRotation += 45;
			}
 
			addEventListener(Event.ENTER_FRAME, linesListener);
		}
 
		function linesListener(e:Event) {
			for(var j = 0; j < lineArray.length; j++) {
				lineArray[j].x = player.x;
				lineArray[j].y = player.y;
			}
		}
 
		//УПРАВЛЕНИЕ------------------------
		function CONTROLER() {
				stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);
				stage.addEventListener(KeyboardEvent.KEY_UP,key_up);
				stage.addEventListener(Event.ENTER_FRAME,updateMove);
		}
 
		function key_down(e:KeyboardEvent) {
			if(e.keyCode == 39) {
				right = true;
			}
			if(e.keyCode == 37) {
				left = true;   
			}
			if(right && left) {
				stay = true;
			}
		}
		function key_up(e:KeyboardEvent) {
			if(e.keyCode == 39) {
				right = false;
			}
			if(e.keyCode == 37) {
				left = false;   
			}
			if(right && left) {
				stay = false;
			}
		}
		function updateMove(e:Event) {
			if(right) {
				player.x += speed;
			}
			if(left) {
				player.x -= speed;
			}
			if(stay) {
				//СТОИМ
			}
		}
	}
}
Линии(потом они будут невидимы, это как бы "зона видимости" в игре), я хочу сделать так, чтобы натыкаясь на "препятствия"(стены) линии бы уменьшались, уменьшая тем самым "зону видимости". Но так как я мало знаком с методом hitTest( ), реализовать это я не могу...Подскажите пожалуйста, как это сделать? Ранее я пытался сделать это с hitTestObject( ), но естественно диагональные линии сокращались (scaleY -), не касаясь препятствий... И еще...они сокращались как бы постепенно, то есть, если зайти за "стену", где линия будет соприкасаться центром, получался казус. Еще я думал убрать этот изъян с помощью циклов(но так и не взялся за это), то есть при соприкосновении со стеной в любой точки... запускается цикл, который уменьшает линию и выводит только итоговый результат, так как это цикл...Тогда как избежать бесконечного цикла?!

Спасибо за внимание...И заранее спасибо за любую помощь, а также громадные плюсы тем, кто поможет улучшить код и отписывать "примечания"...

Создать новую тему   Часовой пояс GMT +4, время: 23:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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