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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.05.2014, 14:53
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 11  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Цитата:
Совсем нет. Любой DO может слушать событие ENTER_FRAME
Да, я это знаю и остается только добавить, что он должен быть добавлен в дисплей лист..

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Если вы делаете игру без MVC, то слушать ENTER_FRAME должен класс игры(который содержит игровую область).
Вешается обычно слушатель как и все другие действия - при init().
Он вызывает у всех своих внутренних элементов, которые движутся метод update(), в котором изменяется анимация и позиция персонажа.
__________________
There is no thing in this world that is not simple.

Старый 28.05.2014, 15:11
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 13  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от LifeIsRhythm Посмотреть сообщение
Да, я это знаю и остается только добавить, что он должен быть добавлен в дисплей лист..
Нет.
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class TestClass extends Sprite {
 
		public function TestClass() {
			var s:Sprite = new Sprite();
			s.addEventListener(Event.ENTER_FRAME, onEnterFrame)
		}
 
		private function onEnterFrame(e:Event):void {
			trace("enter frame"); // трейс срабатывает
		}
 
	}
}
__________________
Ко мне можно и нужно обращаться на ты)

Старый 28.05.2014, 15:30
LifeIsRhythm вне форума Посмотреть профиль Отправить личное сообщение для LifeIsRhythm Найти все сообщения от LifeIsRhythm
  № 14  
Ответить с цитированием
LifeIsRhythm
[+1 22.07.14]
[+4 12.08.14]
[+1 09.02.15]

Регистрация: May 2014
Сообщений: 182
Сорри! Прежде чем ответить, я тоже сделал тест, но по какой-то мистической причине событие не вызывалось.

Нашел причину -
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	public class Juggler extends Sprite 
	{
 
		public function Juggler() 
		{
			super.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		private function enterFrameHandler(event:Event):void 
		{
			trace(event.type);
		}
	}
}
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class TestClass extends Sprite 
	{
		public function TestClass() 
		{
			//var juggler:Juggler =  new Juggler();// так диспатчит
			// но в спешки я сделал так - 
			new Juggler()
			// неужели GC так быстро срабатывает?
			// И какая разница между первым вариантом и вторым ??? 
			//ведь в обоих случаях объект локальный...
		}
 
	}
}

Старый 28.05.2014, 16:57
FlasherEgor вне форума Посмотреть профиль Отправить личное сообщение для FlasherEgor Найти все сообщения от FlasherEgor
  № 15  
Ответить с цитированием
FlasherEgor

Регистрация: Nov 2013
Сообщений: 86
Мистика в том, что вы не добавили Juggler в список отображения методом addChild().
Если я не ошибаюсь...

А нет, ошибаюсь:
Цитата:
отправляется непосредственно целевому элементу независимо от того, находится он в списке отображения или нет.

Старый 28.05.2014, 17:56
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 16  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 613
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
А вдруг твой танк завтра будет из сети управляться? Или игрок из танка пересядет в подводную лодку. Всё как в жизни: Танк - он и в Африке танк, класс один. А какой водитель им управляет это уже другое дело. Получается три класса: Tank - с методами управления, AIDriver, PlayerDriver (который слушает клавиатуру и рулит танком, вызывая у него функции turnLeft(), gear(), break(), shoot()). А дальше вызывать player.setVehicle(tank). Причём игрока в академии научили рулить всеми устройствами которые могут ездить взад вперёд и поворачивать, поэтому у танка должен быть интерфейс IVehicle и Классы водителей работают именно с IVehicle, а не с конкретным танком.


Последний раз редактировалось Rzer; 28.05.2014 в 18:08.
Старый 28.05.2014, 18:59
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 17  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Подпишусь под словами Rzer, всё правильно сказал.
И ещё добавлю, что вместо turnLeft можно сделать функцию, которая будет медленно поворачивать дупло танка влево-вправо, через ENTER_FRAME, и вторую функцию, которая будет давать целевой угол поворота. Функция по ENTER_FRAME будет плавно поворачивать тыкву танка в нужную сторону в зависимости от целевого угла.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
поэтому у танка должен быть интерфейс IVehicle и Классы водителей работают именно с IVehicle, а не с конкретным танком.
Это геморрой. Сам на эти грабли наступал. Лучше сделать базовый класс общий, Vehicle extends Sprite и от него наследовать все остальное. Не нужен там интерфейс. Так как при необходимости подписать его на события или добавить в дисплей лист надо будет приводить к соответствующему типу, потому что нужных методов у IVehicle нет. Вопрос: зачем тут нужен интерфейс тогда?
Я говорю это не по наслышке. Я просто делал игру Война Икс в вк (пришлось сейчас отключить из-за нерентабильности), и там сделал именно с интерфейсами (в точности как у вас описано). Ох и натерпелся я в ней проблем из-за этого
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
Я говорю это не по наслышке. Я просто делал игру Война Икс в вк (пришлось сейчас отключить из-за нерентабильности), и там сделал именно с интерфейсами (в точности как у вас описано). Ох и натерпелся я в ней проблем из-за этого
Да не нужны в ас3 интерфейсы , не партесь, это все для максимальной чистоты кода, не больше, а вот проблем типа addChild - навалом.
__________________
Марк Tween

Старый 29.05.2014, 04:31
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 20  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну, я люблю мечтать, что когда-нибудь напишу игру, построенную на интерфейсах, как идеал. Кажется, это так здорово. До сих пор ни разу их не использовал.
А насчёт приведения типов... Разве не по иерархической структуре всё это собирается?
Например, класс, реализующий методы интерфейса IPickable, называется Thing. Thing наследуется от Sprite. Яблоко наследуется от класса Thing. Неужели для добавления в DisplayList нужно приводить тип as DisplayObject? Я прост не пользовался интерфейсами никогда)
Код AS3:
addChild(new Apple());
__________________
There is no thing in this world that is not simple.

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

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

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


 


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


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