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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question не работает Instance name

Здраствуйте. Пишу арканоид.
В главном классе добавляется класс ракетки и класс шарика.

Код AS3:
private var _platform:Platform;
		private var _ball:Ball;
                ....
		_platform = new Platform();
		addChild (_platform);
		_ball = new Ball();
		_ball.setPlatform(_platform);
		addChild (_ball);
В классе шарика Ball.as

Код AS3:
		private var platform:Platform;
                ....
		public function setPlatform(platformObj:Platform):void
		{
			platform = platformObj;
		}
                ....
		// Столкновение с platform
		if (platform.hitTestPoint(ball.x, ball.y, true))
		{
			speedY = -3;
                }
Всё это прекрасно работает.
Но вот я захотел сделать несколько областей в платформе, чтобы отскоки были разными в зависимости от попадания на область.
Встроил в муви-клип Platform несколько областей-маячков hit_place. Проименовал их в instance name hit1, hit2, hit3
И попробовал сделать так:
Код AS3:
if (platform.hit1.hitTestPoint(ball.x, ball.y, true))
но ту-же получил ошибку:
Error: Access of possibly undefined property hit1 through a reference with static type Platform.
Подскажите, как это побороть?

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

Регистрация: Jan 2009
Сообщений: 1,651
Какой класс наследует Platform?
В принципе, можно написать вот так:
Код AS3:
if (platform["hit1"]hitTestPoint(ball.x, ball.y, true))
Если вы уверены, что Hit1 там точно есть, но это немного быдлокод =)
__________________
мой пустой блог

Старый 17.01.2013, 17:20
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 3  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Наследовал Sprite
Поправил на
Код AS3:
public class Platform extends MovieClip
но не помогло.
Вот так тоже не получилось
Код AS3:
if (platform["hit1"].hitTestPoint(ball.x, ball.y, true))
Пишет: Не удалось найти свойство hit1 в Platform; отсутствует значение по умолчанию.
Хотя десять раз перепроверил. "hit1" на месте

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

Регистрация: Jan 2009
Сообщений: 1,651
Не понимаю, как у тебя Platform может наследовать MovieClip или Sprite, если ты говоришь: "Встроил в муви-клип Platform несколько областей-маячков hit_place. Проименовал их в instance name hit1, hit2, hit3". Ведь тогда у тебя Platform должен наследовать вот тот самый муви-клип куда ты встроил hit1 и т.д.

А, стоп. Ты не в FlashDevelop работаешь, не используешь swc с библиотекой символов. Хм.. но тогда должно все работать. Ну а вот так trace (platform.getChildByName("hit1")) что выведет?
__________________
мой пустой блог

Старый 17.01.2013, 17:38
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 5  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Выводит null.
Я, возможно, немного запутался.
Использую FlashDevelop. С swc для графики из Flash IDE.
Во Flash IDE в библиотеке я создал мувиклип platform. AS Linkage называется Platform_mc.
Внутри этого мувиклипа, помимо картинки самой ракетки - несколько мувиклипов hit_place, названные в instance name hit1, hit2 итд.

Старый 17.01.2013, 17:41
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 6  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Так. Если ты используешь FlashDevelop и подключаешь библиотеку символов с помощью swc, ио откуда в Platform extends MovieClip берется графика из символа Platform_mc?
__________________
мой пустой блог

Старый 17.01.2013, 17:49
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 7  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Хороший вопрос.
Я размышлял так.
Я в самом начале в главном классе пишу
Код AS3:
_platform = new Platform();
addChild (_platform);
После этого, значит, у меня начинает выполнятся код класса Platform.
(извиняюсь что я так криво пишу. я с этими классами только пытаюсь разобраться)
Так вот. И в классе Platform у меня есть такое:
Код AS3:
		private function createPlatform():void
		{
			platform =  new Platform_mc();
			addChild(platform);
			platform.x = 300;
			platform.y = 445;
		}
И после этого, полагал я - всё, что внутри этого Platform_mc есть - вместе с подклипами hit1, hit2... - всё это должно подгрузиться. Разве нет?

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

Регистрация: Jan 2009
Сообщений: 1,651
Не так. Есть два основных способа использовать символы из swc в FD.
Метод 1.
Код AS3:
package {
  public class Platform extends Platfrom_mc { 
  }
}
Мувик с кодом Platfrom наследует напрямую Platform_mc из swc бибилотеки. Все именнованные символы из Platform_mc доступны напрямую.
Код AS3:
var p:Platform = new Platform ();
trace (p.hit1);
Метод 2.
Код AS1/AS2:
package {
  public class Platfrom extends Sprite {
    public var mc:MovieClip;
    function Platfrom(){
      mc = new Platfrom_mc();
      addChild(mc);
    }
  }
}
В данном случае "пустой" спрайт Platfrom добавляет в себя мувик Platfrom_mc. Соответсвенно все именнованные мувики из Platform_mc находятся в:
Код AS3:
var p:Platfrom = new Platform();
trace (p.mc.hit1);
У тебя судя по всему, что-то типа второго метода. Но только platform_mc ты держишь в _platfrom, что, судя по "_" - приватное свойство, и другие объекты к нему доступа не имеют.
__________________
мой пустой блог

Старый 17.01.2013, 18:22
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 9  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Всё. Понял. Заработало. Спасибо огромное!

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

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

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


 


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


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