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

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

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

Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
Attention Как получить доступ к объекту из другого класса?

Здравствуйте!
Пишу что-то наподобие Arkanoid'а и вот столкнулся с такой проблемой:

Main.as:
Код AS3:
package 
{
	import flash.display.MovieClip;
 
 
	public class Main extends MovieClip
	{
		public var paddle:Paddle=new Paddle();
		public var ball:Ball=new Ball();
 
 
		public function Main()
		{
			paddle.x = 253;
			paddle.y = 765;
			addChild(paddle);
			ball.x = 284;
			ball.y = 720;
			addChild(ball);
 
		}
 
	}
 
}
Paddle.as:
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
 
	public class Paddle extends MovieClip
	{
		private var left:Boolean = false;
		private var right:Boolean = false;
		private var speed:Number = 0;
		private var speedMax:Number = 12;
		private var speedMaxReverse:Number = -12;
		private var speedAcceleration:Number = .25;
		private var speedDeceleration:Number = .1;
		private var groundFriction:Number = .95;
		private var velocityX:Number = 0;
 
		public function Paddle()
		{
			addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}
 
		private function onAddedToStage(event:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
 
			init();
 
		}
 
		private function init():void
		{
			stage.addEventListener(Event.ENTER_FRAME, runGame);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, myOnPress);
			stage.addEventListener(KeyboardEvent.KEY_UP, myOnRelease);
 
		}
		private function runGame(event:Event):void
		{
 
 
 
 
 
			if (right)
			{
				if (this.x + this.width < stage.stageWidth - 11)
				{
					//check if below speedMax
					if (speed < speedMax)
					{
						//speed up
						speed +=  speedAcceleration;
						//check if above speedMax
						if (speed > speedMax)
						{
							//reset to speedMax
							speed = speedMax;
						}
					}
				}
				else
				{
					speed = 0;
				}
			}
 
 
			if (left)
			{
				if (this.x > 11)
				{
					//check if below speedMaxReverse
					if (speed > speedMaxReverse)
					{
						//speed up (in reverse)
						speed -=  speedAcceleration;
						//check if above speedMaxReverse
						if (speed < speedMaxReverse)
						{
							//reset to speedMaxReverse
							speed = speedMaxReverse;
						}
					}
				}
				else
				{
					speed = 0;
				}
			}
 
			speed *=  groundFriction;
			// calculate velocity based on speed
			velocityX = 1 * speed;
 
			// update position
			this.x +=  velocityX;
 
		}
 
		private function myOnPress(event:KeyboardEvent):void
		{
 
			switch ( event.keyCode )
			{
 
 
				case Keyboard.LEFT :
					left = true;
					break;
 
 
				case Keyboard.RIGHT :
					right = true;
					break;
			}
 
			event.updateAfterEvent();
		}
 
		private function myOnRelease(event:KeyboardEvent):void
		{
			switch ( event.keyCode )
			{
 
				case Keyboard.LEFT :
					left = false;
					break;
 
				case Keyboard.RIGHT :
					right = false;
					break;
			}
 
		}
 
	}
 
}
Ball.as:
Код AS3:
 
.....
........
	if (this.hitTestObject(Main.paddle)) // 1061: Обращение к возможно неопределенному методу getChildAt через ссылку статического типа Class.
 
			{
				calcBallAngle();
			}
		}
 
		function calcBallAngle():void
		{
			//ballPosition is the position of the ball is on the paddle
			var ballPosition:Number = this.x - Main.paddle.x; // 1061: Обращение к возможно неопределенному методу getChildAt через ссылку статического типа Class.
			//hitPercent converts ballPosition into a percent
			//All the way to the left is -.5
			//All the way to the right is .5
			//The center is 0
			var hitPercent:Number = (ballPosition / (Main.paddle.width - this.width)) - .5; // 1061: Обращение к возможно неопределенному методу getChildAt через ссылку статического типа Class.
			//Gets the hitPercent and makes it a larger number so the
			//ball actually bounces
			ballXSpeed = hitPercent * 10;
			//Making the ball bounce back up
			ballYSpeed *=  -1;
		}
	}
На сцену добавляются ball и paddle посредством кода. Нужно проверить столкновение между ball и paddle, записать это внутри класса Ball. Ума не приложу, как сослаться на paddle внутри класса Ball. В файле Ball.as я написал ошибки компилятора напротив тех строк, которые эти ошибки вызывают.

Спасибо.

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
либо сделайте их статическими либо пишите
Код AS3:
(root as Main).paddle

Старый 30.06.2013, 21:38
artur1995g вне форума Посмотреть профиль Отправить личное сообщение для artur1995g Найти все сообщения от artur1995g
  № 3  
Ответить с цитированием
artur1995g

Регистрация: Mar 2010
Адрес: Казань)
Сообщений: 18
спасибо!

Старый 30.06.2013, 21:46
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 4  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
если очень надо, передавайте ссылку на объект, и не занимайтесь ерундой вроде (root as Main).paddle
__________________
местонахождение

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

Теги
arkanoid , class , hitTestObject( ) , var
Опции темы
Опции просмотра

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

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


 


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


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