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

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

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

Регистрация: Apr 2012
Сообщений: 88
По умолчанию Перенести код в другой класс.

Код AS3:
package{
	import flash.display.*;
	import flash.events.*;
	public class LifeArena extends MovieClip
	{
		>public var Hero:HeroMan=new HeroMan();
 
		public function LifeArena()
		{
			>addChild(Hero);
			>stage.addEventListener(KeyboardEvent.KEY_DOWN,Cont);
			>function Cont(e:KeyboardEvent)
			>{
			>	if(e.keyCode==37)
			>	{Hero.x-=5;}else if(e.keyCode==39){Hero.x+=5;}
			>	else if(e.keyCode==38){Hero.y-=5;}
			>	else if(e.keyCode==40){Hero.y+=5;}
			>}
		}
 
	}
 
}
Моя цель засунуть управление героем в другой класс.
Как это сделать?
Писать код который выделен стрелками ">" в конструкторе объекта HeroMan или создать отдельный класс?
Ну вообщем я делал в отдельном классе, а пока писал дошло:" А почему бы не написать этот код в классе HeroMan(т.е. героя?)

Вообщем вопрос стоит так: Как сделать проще, что бы не нагромождать основной класс "Флешки"?

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
Пишем отдельно класс "герой" так же пишем класс "контроллер".
Нужно манипулировать героем, передаём классу "контроллер" класс "герой"
Класс "контроллер" имеет интерфейс обращения к объектам сцены,
"контроллер" проверил входящий объект, а ... это объект "герой" значит рулим так,
а... это объект "противник" рулим так. И так далее.
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

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

Регистрация: Apr 2012
Сообщений: 88
Пишем отдельно класс "герой"(1) так же пишем класс "контроллер".(2)
(1)Что писать в классе герой, он же уже создан при экспорте клипа из библиотеки.
(2) Есть такой класс.
в нем.
Код AS3:
package{
	import flash.display.*;
 
	import flash.net.*;
 
  	import flash.events.*;
 
 
	public class HeroControl extends MovieClip{
 
 
		///Конструктор
		public function HeroControl()
		{ 
		var Hero:HeroMan=new HeroMan();
		addChild(Hero);
		Hero.x=100;
		Hero.y=100;
		Hero.addEventListener(KeyboardEvent.KEY_DOWN,Cont);
			function Cont(e:KeyboardEvent)
			{
				if(e.keyCode==37)
				{Hero.x-=5;trace("Work");}else if(e.keyCode==39){Hero.x+=5;}
				else if(e.keyCode==38){Hero.y-=5;}
				else if(e.keyCode==40){Hero.y+=5;}
			}
		}
	}
 
 
 
 
 
 
}
Вызываю его в основном классе, ничего не происходит, даже Объекта "Hero" не видно, но при проверке он имеет заданный координаты.

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

Регистрация: Mar 2010
Адрес: 54.713862552265084 = 20.442724227905273
Сообщений: 449
Отправить сообщение для stweet с помощью Skype™
На коленке:

Код AS3:
// интерфейс
package  
{
	public interface IMoveObject {
 
		function xMove(i:int):void;
		function yMove(i:int):void;
 
		function set speed (value:Number):void ;
		function get speed ( ):Number ;
	}
}
 
// Hero
package  
{
	import flash.display.Sprite;
 
	public class Hero extends Sprite implements IMoveObject
	{
		private var _speed:int;
 
		public function Hero ( ) {
			graphics.beginFill(0xFF8040);
			graphics.drawCircle(0, 0, 20);
			graphics.endFill( );
		}
 
		/* INTERFACE IMoveObject */
 
		public function xMove(i:int):void { x += i; }
		public function yMove(i:int):void { y += i; }
 
		public function set speed(value:Number):void { _speed = value; }
		public function get speed( ):Number { return _speed; }
	}
}
 
// controller
package  
{
	import flash.display.Stage;
	import flash.events.KeyboardEvent;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
 
	public class Controller
	{
		private var object:IMoveObject;
		private var timer:Timer;
		private var stage:Stage;
 
		private const LEFT:int = 37;
		private const TOP:int = 38;
		private const RIGHT:int = 39;
		private const BOTTOM:int = 40;
 
		private var moveLeft:Boolean;
		private var moveTop:Boolean;
		private var moveRight:Boolean;
		private var moveBottom:Boolean;
 
 
 
		public function Controller (stage:Stage, object:IMoveObject) {
			this.object = object;
			this.stage = stage;
			timer = new Timer(10);
		}
 
 
 
		private function onTimerEvent(e:TimerEvent):void {
			if (moveLeft) object.xMove(-object.speed);
			if (moveRight) object.xMove(object.speed);
			if (moveTop) object.yMove(-object.speed);
			if (moveBottom) object.yMove(object.speed);
		}
 
 
 
		private function onKeyUp(e:KeyboardEvent):void {
			switch(e.keyCode) {
				case LEFT: moveLeft = false; break;
				case TOP: moveTop = false; break;
				case RIGHT: moveRight = false; break;
				case BOTTOM: moveBottom = false; break;
				default : return;
			}
		}
 
 
 
		private function onKeyDown(e:KeyboardEvent):void {
			switch(e.keyCode) {
				case LEFT: moveLeft = true; break;
				case TOP: moveTop = true; break;
				case RIGHT: moveRight = true; break;
				case BOTTOM: moveBottom = true; break;
				default : return;
			}
		}
 
 
 
		public function set interactiv (value:Boolean):void { 
			if (value) {
				timer.addEventListener(TimerEvent.TIMER, onTimerEvent);
				stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
				stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
				timer.start( );
			} else {
				timer.stop( );
				timer.removeEventListener(TimerEvent.TIMER, onTimerEvent);
				stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
				stage.removeEventListener(KeyboardEvent.KEY_UP, onKeyUp);
			}
		}
	}
}
 
// Main
package  
{
	import flash.display.Sprite;
 
	public class Test2D extends Sprite 
	{
 
		public function Test2D ( ) {
 
			var hero:Hero = new Hero( );
				hero.speed = 10;
				hero.x = 100;
				hero.y = 100;
			addChild(hero);
 
			var control:Controller = new Controller(stage, hero);
				control.interactiv = true;
		}
	}
}
__________________
Спросишь, дурак на минуту. Если не спросишь, дурак на всю жизнь!

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

Регистрация: Apr 2012
Сообщений: 88
Спасибо тебе. Но сколько про интерфейсы я не читал, чет нихера не понял. Дремучий лес какой-то.
Пока на это забью...

Добавлено через 21 минуту
Сделал так
...NameFLAFile
Код AS3:
package{
	import flash.display.*;
	import flash.events.*;
	public class LifeArena extends MovieClip
	{
 
 
		public function LifeArena()
		{
		var Heroc:HeroControl=new HeroControl();
		addChild(Heroc.Hero);
		stage.addEventListener(KeyboardEvent.KEY_DOWN,Heroc.Cont);
		}
 
	}
 
}
...HeroControl
Код AS3:
package{
	import flash.display.*;
 
	import flash.net.*;
 
  	import flash.events.*;
 
 
	public class HeroControl extends MovieClip{
		public var Hero:HeroMan=new HeroMan();
		///Конструктор
		public function HeroControl()
		{
 
		}
		public function Cont(e:KeyboardEvent)
			{
				if(e.keyCode==37)
				{Hero.x-=5;}else if(e.keyCode==39){Hero.x+=5;}
				else if(e.keyCode==38){Hero.y-=5;}
				else if(e.keyCode==40){Hero.y+=5;}
			}
		}
	}

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

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

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


 


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


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