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

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

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

Регистрация: Jan 2010
Сообщений: 187
По умолчанию Управление кубиком

Помогите разобраться.
Вот у меня есть объект мувиклип, который я в главном классе создаю на сцене, а в другом классе у меня управление к этому клипу.
Клип создаётся, а управление почему-то не работает.
Подскажите, что я забыл сделать?

Главный класс Game.as

Код AS3:
package {
 
	import flash.display.MovieClip;
 
	public class Game extends MovieClip {
 
		public function Game() {
 
	var hero:MovieClip = new Hero1();
	hero.x = 100;
	hero.y = 100;
	addChild(hero);
 
			}
		}	
	}
Класс управления Keys.as

Код AS3:
package {
 
	import flash.display.MovieClip;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
 
	public class Keys extends MovieClip {
 
		public function Keys() {
 
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed, false, 0, true);
		}
 
		private function onKeyPressed(evt:KeyboardEvent):void {
			switch (evt.keyCode) {
				case Keyboard.UP:
					hero.y -= 10;
					break;
				case Keyboard.DOWN :
					hero.y += 10;
					break;
				case Keyboard.LEFT :
					hero.x -= 10;
					break;
				case Keyboard.RIGHT :
					hero.x += 10;
					break;
			}
		}

Старый 01.05.2010, 14:04
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 2  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Если скомпилить второй клас, то выдаст ошибку, что не определенна переменная hero. Первый ваш класс со вторым никак не связан и не знает что внутри первого есть переменная hero. Соответственно ничего и не происходит.

Старый 01.05.2010, 14:18
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
hero, по крайней мере, должен быть бубликом пабликом и статиком.
__________________
тут я

Старый 02.05.2010, 19:03
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 4  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
В первом классе (который Game.as) я вроде бы определяю переменную hero вот в этой строчке:
Код AS3:
var hero:MovieClip = new Hero1();
Во второй класс добавил строчку:
Код AS3:
public var hero;
Или это я зря?

А как связать эти два класса?
Объясните, если можно, попроще. Я только начал с AS3 и, честно говоря, тяжело идёт пока.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Вы объявили одну и ту же переменную два раза, причем одна из них локальная, вторая паблик. А зачем? Нужно в главном классе создать переменную, видимую везде.
Код AS3:
public static var hero:MovieClip;
...
hero = new Hero1();
Теперь можно манипулировать с этой переменной из любой точки пакета.
__________________
тут я

Старый 03.05.2010, 01:28
vitalik14 вне форума Посмотреть профиль Отправить личное сообщение для vitalik14 Найти все сообщения от vitalik14
  № 6  
Ответить с цитированием
vitalik14

Регистрация: Oct 2009
Адрес: x=9;y=9;z=1;
Сообщений: 22
//пример выдает
TypeError: Error #1009: Cannot access a property or method of a null object reference.
//вот в этом месте
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed, false, 0, true);

как я понял stage здесь вроде не выход из ситуации=)

Старый 03.05.2010, 11:43
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Все правильно, стейдж просто не успевает определиться для этого класса. Нужно создать событие ADDED_TO_STAGE, которое и будет присоединять к стейджу обработчик события нажатия кнопок.

Код AS3:
super();
addEventListener(Event.ADDED_TO_STAGE, onAdded);
 
...
 
private function init(e:Event):void {
	removeEventListener(Event.ADDED_TO_STAGE, onAdded);
	stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed, false, 0, true);
}
__________________
тут я

Старый 04.05.2010, 16:10
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 8  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Запутался.
Прилагаю мою последнюю версию. Она и не ругается ни на что (что вроде хорошо), но и не работает.
Посмотрите пожалуйста.
Вложения
Тип файла: rar 04.rar (6.6 Кб, 47 просмотров)

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Ух, как я отвык от FlashIDE, а он, гад, еще и без автокомплита нормального... Так, во-первых, класс Keys у вас лежит просто рядом и никак не связан с главным классом. Сами классы должны быть расширены не от MovieClip, а от Sprite (прочитайте у Мука подробное руководство, там описывается). Во-вторых, к публичной переменной в другом классе следует обращаться как ИмяКласса.переменная. И вообще, зачем вешать нажатие клавиш на стейдж? Присоединить следует hero, так же логичнее - нет героя, нет и слушателя. Конечно, если его убрать предварительно. В таком случае к герою следует обращаться так - MovieClip(e.target). И вообще, следует поместить слушателя в класс-поведение героя. В-третьих, не старайтесь писать много в конструкторе, выносите в отдельные функции.
И разберитесь с форматированием, тратится лишнее время на то, чтобы разобрать этот простой, но кривоотформатированный код.
__________________
тут я


Последний раз редактировалось КорДум; 04.05.2010 в 18:57.
Старый 04.05.2010, 20:27
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 10  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Спасибо.
Кое что понял наконец. Буду разбираться.

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

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

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


 


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


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