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

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

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

Регистрация: Nov 2010
Сообщений: 12
Question Как при условии перевести объект в отдельный класс?

Короче, еще одна заморочка.
Есть массив объектов. Объекты эти падают вниз. Во время хиттеста с поверхностью, объект должен двигаться не вертикально, а горизонтально.Но тут проблема вот в чем:
Скажем, есть код:
Код AS3:
//army - массив
for each( var alien:Alien in army)/* меня терзают сомнения на счет for each in, но я без понятия чем это можно заменить*/
	if (grounded) alien.MoveABit(0,3);//объект двигается по-вертикали
		if(alien.hitTestObject(ground))// объект падает на пол
		{
			alien.MoveABit(3,0);// тут объект должен двигаться по-горизонтали
			grounded = false;//флаг
                  }
Мне больше ничего в голову не пришло, как разделить летящие и идущие объекты на разные классы.Но вот толку с того что я их разделю нет. Как сделать так, чтобы объект летел себе, при попадании на землю шел, а остальные объекты так же себе летели?
Или же мне придется убрать массив и прописать каждый объект в отдельности?


Последний раз редактировалось iNils; 25.11.2010 в 23:28.
Старый 25.11.2010, 22:28
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Определите свойство grounded в классе Alien и спрашивайте его у каждого объекта.
Код AS3:
if (alien.grounded) alien.MoveABit(0,3);//объект двигается по-вертикали
if (alien.hitTestObject(ground))// объект падает на пол
{
    alien.MoveABit(3,0); // тут объект должен двигаться по-горизонтали
    alien.grounded = false; //флаг
}
А чтобы лишний раз не вызывать hitTestObject() можно, пожалуй, сделать так:
Код AS3:
for each( var alien:Alien in army)
{
    // Здесь, если alien.grounded == false, hitTestObject() выполняться уже не будет,
    // т.к. из одного false уже ясно, что условие в целом будет ложно.
    if (alien.grounded && alien.hitTestObject(ground)) alien.grounded = false;
    alien.grounded ? alien.MoveABit(0,3) : alien.MoveABit(3,0);
}
Добавлено через 10 минут
Несколько нелогично используется названная таким образом перемнная – grounded. Получается, когда она равна true, объект движется по вертикали, хотя название переменной говорит нам, что он приземлился.


Последний раз редактировалось bav; 25.11.2010 в 22:42.
Старый 25.11.2010, 22:41
al0ne вне форума Посмотреть профиль Отправить личное сообщение для al0ne Найти все сообщения от al0ne
  № 3  
Ответить с цитированием
al0ne

Регистрация: Nov 2010
Сообщений: 12
Хех. Мне, в принципе, все равно что и как называется=)
А за помощь спасибо. Сейчас попробую что получится.

Добавлено через 17 минут
ОО. Как обычно, я не в теме как все работает, но работает=)
Одно напрягает:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект null at ScotlandCheer()

Спасибо еще раз за помощь.


Последний раз редактировалось al0ne; 25.11.2010 в 23:00.
Старый 25.11.2010, 23:08
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 4  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Цитата:
Как обычно, я не в теме как все работает, но работает=)
Если вы про строчку
Код AS3:
alien.grounded ? alien.MoveABit(0,3) : alien.MoveABit(3,0);
то это просто короткая форма записи следующего кода:
Код AS3:
if (alien.grounded) alien.MoveABit(0,3);
else alien.MoveABit(3,0);

Старый 25.11.2010, 23:11
al0ne вне форума Посмотреть профиль Отправить личное сообщение для al0ne Найти все сообщения от al0ne
  № 5  
Ответить с цитированием
al0ne

Регистрация: Nov 2010
Сообщений: 12
Теперь ясно=) А то ведь я Муков и подобной лабуды не читаю. Просто я уже 6 раз возвращаюсь к программированию и не охота снова на теории забить.

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
По-поводу Error #1009, в функции ScotlandCheer(), если уж вам не пишут в какой строчке кода возникла ошибка, используйте trace(), чтобы узнать что же это такое еще все еще null, когда ему давно пора им уже не быть.

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

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

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


 


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


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