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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question Как в одном классе увидеть другой?

Здраствуйте.
Пишу арканоид. Пробую использовать классы.
Не получается из одного класса отслеживать что происходит в другом.
Поясню.
Пока самое начало - у меня класса всего три: Main, Ball и Platform.

в Main.as просто добавляется на сцену фон и запускаются (наверное тут другое слово правильнее) остальные два класса.

Код AS3:
		private function createScene():void 
		{
			var back_game:MovieClip = new Back_mc(); addChild(back_game);
 
			addChild ( new Platform() );
			addChild ( new Ball() );
		}
В Platform.as добавляется на сцену платформа для отбивания шарика и привязывается к мышке.

Код AS3:
package  
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Platform extends Sprite
	{
 
		private var platform:MovieClip;
 
		public function Platform() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			createPlatform();
 
			stage.addEventListener(MouseEvent.MOUSE_MOVE, platformMouseMove);
			this.addEventListener(Event.ENTER_FRAME, platformKeyboardMove);
		}
 
		private function createPlatform():void
		{
			platform =  new Platform_mc();
			addChild(platform);
			platform.x = 300;
			platform.y = 445;
		}
 
 
		// двигаем платформу вслед за мышкой
		public function platformMouseMove(e:MouseEvent):void
        {
	    platform.x = mouseX - 50;
            if (platform.x < 10) { platform.x = 10 }
            if (platform.x + 100 > 630) { platform.x = 630 - 100}
        }
	}
}
И в классе Ball.as всё что связано с шариком. Отскоки его от стен и взаимодействие с платформой.
Вот у меня как раз не получается взаимодействовать с платформой. (см. закомменченную строку в самом низу - это то, как я себе это представлял)

Код AS3:
package  
{
	import flash.display.*;
	import flash.events.Event;
 
	public class Ball extends Sprite
	{
		private var ball:MovieClip;
		private var speedX:int = 3;
                private var speedY:int = -3;
 
		public function Ball() 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			createBall();
			addEventListener(Event.ENTER_FRAME, moveBall);
		}
 
		// создаём ball
		private function createBall():void
		{
			ball =  new Ball_mc();
			addChild(ball);
			ball.x = 320;
			ball.y = 400;
		}
 
		private function moveBall(e:Event = null):void 
		{
			ball.x += speedX;
			ball.y += speedY;
 
 
			// Столкновение со стенкой
			if (((ball.x + 4) > 630) || ((ball.x - 4) < 10) ) 
			speedX = - speedX;
			if (((ball.y + 4) > 470) || ((ball.y - 4) < 50) )
			speedY = - speedY;
 
			// Столкновение с platform
			//if (ball.hitTestObject(platform)) speedY = - speedY;
		}
	}
}
Как же мне увидеть в классе Ball, что мой шарик столкнулся с платформой?

Старый 14.01.2013, 20:06
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Вместо
Цитата:
Сообщение от In8Finity Посмотреть сообщение
addChild ( new Platform() );
addChild ( new Ball() );
Нужно
Код AS3:
private var _platform:Platform = new Platform();
private var _ball:Ball = new Ball();
 
addChild (_platform);
addChild (_ball);
Подозреваю что вычисления столкновений должны быть в главном классе. Ведь этот класс знает о платформе и шаре, соответственно вы сможете проверять на столкновение просто используя объявленные выше переменные.

Код AS3:
if (_platform.hitTestObject(_ball))
А вы случаем дальше SharedObject не будете прикручивать?
__________________
adobe AS3 manual

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

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

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


 


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


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