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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.12.2011, 20:06
St.Anger вне форума Посмотреть профиль Отправить личное сообщение для St.Anger Найти все сообщения от St.Anger
  № 1  
Ответить с цитированием
St.Anger

Регистрация: Dec 2011
Сообщений: 3
По умолчанию Обратится из класса к объекту на сцене

Здравствуйте! есть класс для героя, и обьект "pl" который находится на сцене.

При выполнении выводит ошибку

d.as, Line 85 1120: Обращение к несуществующего свойства pl.

подскажите пожалуйста как можно решить эту задачу
вот собственно сам код:

Код AS3:
package hero{
	import flash.display.*;
	import flash.events.*;
	public class d extends MovieClip {
 
		var nywton=10;
		var grav:Number=5;
		var jumping:Boolean=false;
		var jumpPow:Number=0;
 
		public function d() {
			stage.addEventListener(KeyboardEvent.KEY_DOWN,okd);
			stage.addEventListener(Event.ENTER_FRAME,oef);
		}
 
		public function okd(evt:KeyboardEvent):void {
			if (evt.keyCode==38) {
				if (jumping!=true) {
					jumpPow=-50;
					jumping=true;
				}
			}
		}
		public function oef(evt:Event):void {
			if (jumping) {
				this.y+=jumpPow;
				jumpPow+=grav;
				if (this.hitTestObject(pl)) {
					jumping=false;
				}
			}
			if (!(this.hitTestObject(pl)) && !(jumping)) {
				this.y+=nywton;
			}
		}
	}
}

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ссылку на "объект pl" еще нужно получить. "pl", по всей видимости, есть значение поля "name" у какого-то визуального объекта, брошенного на timeline во время редактирования. Вы бы сначала получили бы ссылку на него

Код AS3:
private const _plObject:DisplayObject = super.getChildByName('pl');
а потом бы можно и обратиться
Код AS3:
super.hitTestObject(_plObject);
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 21.12.2011 в 20:26.
Старый 22.12.2011, 00:21
St.Anger вне форума Посмотреть профиль Отправить личное сообщение для St.Anger Найти все сообщения от St.Anger
  № 3  
Ответить с цитированием
St.Anger

Регистрация: Dec 2011
Сообщений: 3
Простите за нубский вопрос, но правильно лия использовал ваш совет?
Код AS3:
package hero{
	import flash.display.*;
	import flash.events.*;
	public class d extends MovieClip {
		private const _plObject:DisplayObject=super.getChildByName('pl');
		var nywton=10;
		var grav:Number=5;
		var jumping:Boolean=false;
		var jumpPow:Number=0;
 
		public function d() {
			stage.addEventListener(KeyboardEvent.KEY_DOWN,okd);
			stage.addEventListener(Event.ENTER_FRAME,oef);
			super.hitTestObject(_plObject);
		}
 
		public function okd(evt:KeyboardEvent):void {
 
			if (evt.keyCode==38) {
				if (jumping!=true) {
					jumpPow=-50;
					jumping=true;
				}
			}
		}
 
		public function oef(evt:Event):void {
			if (jumping) {
				this.y+=jumpPow;
				jumpPow+=grav;
				if (this.hitTestObject(_plObject)) {
					jumping=false;
				}
			}
			if (!(this.hitTestObject(_plObject)) && !(jumping)) {
				this.y+=nywton;
			}
		}
	}
}
при этом trace выдаёт:
TypeError: Error #2007: Параметр hitTestObject не должен быть равен нулю.

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

Регистрация: Mar 2011
Сообщений: 38
Если пытаться из описания класса обращаться к копиям объектов по их именам - всегда будут ошибки. Нужно проверить "pl" - это инстанс нейм или что?

Я в подобном случае делал немного иначе.
В классе Main создал два контейнера для двух типов объектов (у меня их было много)
Перебирая все объекты в этих контейнерах - делается проверка на хиттест.
Найдя нужный объект - достаточно сделать на него ссылку (см. var someOBJ=BULET.getChildAt(k); someOBJ.life=0; ) и можно обращаться к его свойствам.

Код AS3:
package {
	import flash.display.*;
	import flash.events.*;
 
	public class Main extends MovieClip {
		var i;
		var k;
		var ENEMY:Sprite = new Sprite();
		var BULET:Sprite = new Sprite();
		var en01 = new enemyX();
		var en02 = new enemyX();
		var en03 = new enemyX();
 
 
		public function Main() {
			addChild(ENEMY);
			addChild(BULET);
			//ENEMY******************
			this.en01.x=200;
			this.en01.y=200;
			ENEMY.addChild(en01);
			this.en02.x=600;
			this.en02.y=100;
			ENEMY.addChild(en02);
			this.en03.x=300;
			this.en03.y=400;
			ENEMY.addChild(en03);
			//ENEMY******************
 
			addEventListener(Event.ENTER_FRAME, B_E);
		}
 
		public function B_E(e) {
			for (i=0; i<ENEMY.numChildren; i++) {
				for (k=0; k<BULET.numChildren; k++) {
					if (ENEMY.getChildAt(i).hitTestObject(BULET.getChildAt(k))) {
						var someOBJ=BULET.getChildAt(k);
						someOBJ.life=0;
					}
				}
			}
		}
	}
}


Последний раз редактировалось MAPUTO; 22.12.2011 в 02:41.
Старый 22.12.2011, 16:31
St.Anger вне форума Посмотреть профиль Отправить личное сообщение для St.Anger Найти все сообщения от St.Anger
  № 5  
Ответить с цитированием
St.Anger

Регистрация: Dec 2011
Сообщений: 3
MAPUTO Спасибо разобрался!

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

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

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


 


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


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