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

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

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

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
По умолчанию собственный класс, обращение к объектам главного класса

Делаю аквариум с рыбками. Нарисовал вокруг аквариума область, назвал ее hitTest_mc.
Нарисовал рыбку, поменял ее класс в библиотеке на собственный, который должен заставлять рыбку плавать. И если рыбка наплывет на hitTest_mc, она должна развернуться.

hitTest_mc – инстенснэйм экземпляра, который находится на таймлайне.
Как к нему обратиться из моего дополнительного класса рыбки?
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class FishMove extends MovieClip
	{
 
		public function FishMove(hitTest_mc:Sprite):void 
		{
			trace("FishMove class loaded");
 
			this.addEventListener(Event.ENTER_FRAME, moveMyFish);
		}
 
		private function moveMyFish(evt:Event):void
		{
			this.x += 1;
			if (this.hitTestObject(hitTest_mc))
				{
					this.x -= 1;
				}
 
		}
	}
}
Добавлено через 2 минуты
может что–то надо написать на главном таймлайне?

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
А где код главного класса?

Старый 18.08.2010, 18:52
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 3  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
Цитата:
Сообщение от Bgg Посмотреть сообщение
А где код главного класса?
не думал что понадобится,) вот он
Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.display.StageScaleMode;
	import flash.display.StageAlign;
 
	public class PoulScript extends MovieClip
	{
		private var _stage;
		private var _w:Number;
		private var _h:Number;
 
		public function PoulScript():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;	
			stage.showDefaultContextMenu=false;
 
			addStageVar();
		}
 
		private function addStageVar():void
		{			
			_stage = stage;
			_w = _stage.stageWidth;
			_h = _stage.stageHeight;
 
			scene_1_mc.x = _w/2;
			scene_1_mc.y = _h/2;
 
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressMove);
			loaderInfo.addEventListener(Event.COMPLETE, completeProgress);
 
			_stage.addEventListener(Event.RESIZE, scene_1Resize);
 
			scene_1();
		}
 
//------------------------------------------ПРЕЛОАДЕР------------------------------------------//	
		private function progressMove(event:ProgressEvent):void 
		{
			var loaded:uint = event.bytesLoaded;//сколько загрузилось
			var total:uint = event.bytesTotal;//сколько весит всего
			var procent:uint = int(loaded / total * 100);//процент загрузки
			scene_1_mc.progress_tf.text = int(loaded / total * 100) + '%';
		}
 
		private function completeProgress(event:Event):void 
		{
			_stage.removeEventListener(Event.RESIZE, scene_1Resize);
			_stage.addEventListener(Event.RESIZE, scene_2Resize);
			gotoAndStop(2);
			scene_2();
		}
 
//------------------------------------------РЕСАЙЗИМ СЦЕНЫ------------------------------------------//	
		private function scene_1Resize(evt:Event):void
		{
			_w = _stage.stageWidth;
			_h = _stage.stageHeight;
 
			bg_mc.width = _w;
			bg_mc.height = _h;
			bg_mc.x = _w/2;
			bg_mc.y = _h/2;
 
			scene_1_mc.x = _w/2;
			scene_1_mc.y = _h/2;
		}
 
		private function scene_2Resize(evt:Event):void
		{
			_w = _stage.stageWidth;
			_h = _stage.stageHeight;
 
			bg2_mc.width = _w;
			bg2_mc.height = _h;
			bg2_mc.x = _w/2;
			bg2_mc.y = _h/2;
 
			scene_2_mc.x = _w/2;
			scene_2_mc.y = _h/2;
		}
 
//------------------------------------------СЦЕНЫ------------------------------------------//	
 
		//----------------------------1 «ПРЕЛОАДЕР»--------
		private function scene_1():void
		{
			trace("сцена 1");
 
			bg_mc.width = _w;
			bg_mc.height = _h;
			bg_mc.x = _w/2;
			bg_mc.y = _h/2;
		}
 
		//----------------------------2 сцена--------
		private function scene_2():void
		{
			trace("сцена 2");
 
			bg2_mc.width = _w;
			bg2_mc.height = _h;
			bg2_mc.x = _w/2;
			bg2_mc.y = _h/2;
		}
	}
}
Добавлено через 1 минуту
и у нас в сцене 2 появляется аквариум с hitTest_mc и рыбками


Последний раз редактировалось Dr_Bra; 18.08.2010 в 18:59.
Старый 18.08.2010, 19:25
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
А рыбки то где у вас рождаются? Во втором кадре что ли? Создавайте их в scene_2().

Код AS3:
private function scene_2():void
{
	var fish:FishMove = new FishMove(getChildByName("hitTest_mc"));
	addChild(fish);
 
	trace("сцена 2");
	bg2_mc.width = _w;
	bg2_mc.height = _h;
	bg2_mc.x = _w/2;
	bg2_mc.y = _h/2;
}
Если я конечно вас правильно понял, гыгы. И вообще перепишете все, у вас тут нет острой необходимости в кадрах.

Старый 18.08.2010, 19:26
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Код AS3:
getChildByName('hitTest_mc').x = 100;

Старый 18.08.2010, 19:28
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 6  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
то есть нужно их добавлять в коде, так-то они у меня сразу клались на сцену.

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

Регистрация: Nov 2009
Сообщений: 425
Dr_Bra, по части класса FishMove косяк в логике метода moveMyFish
конкретно вот:
Код AS3:
this.x += 1;
if (this.hitTestObject(hitTest_mc))
{
	this.x -= 1;
}
при столкновении рыба отплывёт на 1рх, после чего продолжит движение по исходному вектору, выглядеть будет так как будто долбится об стенку аквариума =)
введи переменную, отвечающую за смещение, step скажем и обнови метод:
Код AS3:
if (this.hitTestObject(hitTest_mc))
{
	step *= -1;
        // + разворот рыбки
}
this.x += step;
P.S. на верность и правильность моих высказываний не претендую - до AS3 только-только добрался - изучаю пока что... но логика на то и логика - она справедлива для всего =))

Старый 18.08.2010, 19:34
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 8  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
говорит incorrect number of argument..
в главной класс нужно импортировать ?
Код AS3:
import FishMove;
Добавлено через 11 минут
Код AS3:
 
			var fish1:FishMove = new FishMove(getChildByName("hitTest_mc"));// ругаетсо
			scene_2_mc.aquarium_mc.addChild(fish1);
Код AS3:
 
			var fish1:FishMove = new FishMove();//не ругаетсо
			scene_2_mc.aquarium_mc.addChild(fish1);


Последний раз редактировалось Dr_Bra; 18.08.2010 в 19:38.
Старый 18.08.2010, 23:52
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 9  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Нет "главного" класса. Есть тупо набор паттернов. Рекомендую начать с них.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 19.08.2010, 11:03
Dr_Bra вне форума Посмотреть профиль Отправить личное сообщение для Dr_Bra Посетить домашнюю страницу Dr_Bra Найти все сообщения от Dr_Bra
  № 10  
Ответить с цитированием
Dr_Bra
 
Аватар для Dr_Bra

Регистрация: Nov 2008
Адрес: Moscow
Сообщений: 493
Отправить сообщение для Dr_Bra с помощью ICQ
Наверное не стоит париться и делать собственный класс для рыбок, а писать все в одном классе PoulScript, который в моем случае, я считаю, "главный". На самом деле не хотелось плодить код, но решения не нашлось!

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

Теги
дополнительный класс , обращение , объект
Опции темы
Опции просмотра

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

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


 


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


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