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

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

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

Регистрация: Jul 2013
Сообщений: 6
Question Движение персонажа

Здравствуйте, ребят, я новичек, и мне кое-что не понятно.. Собираюсь игрушку сделать) И столкнулся с такой проблемой: делал движение объекта стрелками, на временной диаграмме если код писать, то все получается; а в классе не работает..
Вот код) мы проверяем, нажаты ли клавиши, а исходя из этого перемещаем объект в нужные нам стороны.
Код AS3:
//объект называется cub
import flash.events.KeyboardEvent;
import flash.events.Event;
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
 
var up:Boolean = false;
var down:Boolean = false;
var right:Boolean = false;
var left:Boolean = false;
 
var upS:Number = 1;
var downS:Number = 1;
var rightS:Number = 1;
var leftS:Number = 1;
 
function onKD(e:KeyboardEvent):void {
	if (e.keyCode == 37) {
		left = true;
	}
	if (e.keyCode == 38) {
		up = true;
	}
	if (e.keyCode == 39) {
		right = true;
	}
	if (e.keyCode == 40) {
		down = true;
	}
}
function onKU(e:KeyboardEvent):void {
	if (e.keyCode == 37) {
		left = false;
	}
	if (e.keyCode == 38) {
		up = false;
	}
	if (e.keyCode == 39) {
		right = false;
	}
	if (e.keyCode == 40) {
		down = false;
	}
}
 
stage.addEventListener(Event.ENTER_FRAME, onMovoHero);
 
 
function onMovoHero(e:Event):void {
	if (left) {
		cub.x -= leftS;
		leftS ++;
	} else {
		cub.x -= leftS;
		leftS *= .7;
		}
	if (up) {
		cub.y -=upS;
		upS ++ ;
	} else {
		cub.y -=upS;
		upS *= .7;
	}
	if (right) {
		cub.x += rightS;
		rightS ++;
	} else {
		cub.x += rightS;
		rightS *= .7;
	}
	if (down) {
		cub.y += downS;
		downS ++;
	} else {
		cub.y += downS
		downS *= .7;
	}
}
 
stage.addEventListener(Event.ENTER_FRAME, sled);
 
function sled(e:Event):void {
	swit
}
С ООП у меня не очень. Я так класс написал; видимо, я что-то не так делал..
Код AS3:
package 
{
 
	import flash.display.MovieClip;
	import flash.display.Stage;
 
	public class Movement extends MovieClip
	{
		var up:Boolean = false;
		var down:Boolean = false;
		var right:Boolean = false;
		var left:Boolean = false;
 
		var upS:Number = 1;
		var downS:Number = 1;
		var rightS:Number = 1;
		var leftS:Number = 1;
 
		public function Movement()
		{
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
			stage.addEventListener(KeyboardEvent.KEY_UP, onKU);
			stage.addEventListener(Event.ENTER_FRAME, onMoveHero);
		}
 
		public function onKD(e:KeyboardEvent):void
		{
			if (e.keyCode == 37)
			{
				left = true;
				trace("12312")
			}
			if (e.keyCode == 38)
			{
				up = true;
			}
			if (e.keyCode == 39)
			{
				right = true;
			}
			if (e.keyCode == 40)
			{
				down = true;
			}
		}
 
		public function onKU(e:KeyboardEvent):void
		{
			if (e.keyCode == 37)
			{
				left = false;
			}
			if (e.keyCode == 38)
			{
				up = false;
			}
			if (e.keyCode == 39)
			{
				right = false;
			}
			if (e.keyCode == 40)
			{
				down = false;
			}
		}
 
		public function onMoveHero(e:Event):void
		{
			if (left)
			{
				trace("left");
				this.x -=  leftS;
				leftS++;
			}
			else
			{
				this.x -=  leftS;
				leftS *=  .7;
			}
			if (up)
			{
				this.y -=  upS;
				upS++;
			}
			else
			{
				this.y -=  upS;
				upS *=  .7;
			}
			if (right)
			{
				this.x +=  rightS;
				rightS++;
			}
			else
			{
				this.x +=  rightS;
				rightS *=  .7;
			}
			if (down)
			{
				this.y +=  downS;
				downS++;
			}
			else
			{
				this.y +=  downS;
				downS *=  .7;
			}
		}
 
	}
 
}
/* в основном .fla файле создавал экземпляр класса:
 
var cub:Movement = new Movement;
 
addChild(cub); 
 
Но мувик не двигался и вообще не реагировал...................*/

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

Регистрация: Aug 2012
Сообщений: 297
Проблема в том, что в первом примере ты двигаешь своего персонажа, а во втором двигаешь сцену.

Код AS3:
var cub:Movement = new Movement;
 
addChild(cub);

Ты добавляешь на сцену свой класс?

Код AS3:
package 
{
 
	import flash.display.MovieClip;
	import flash.display.Stage;
 
	public class Movement extends MovieClip
	{
		var cub:MovieClip;
		var up:Boolean = false;
		var down:Boolean = false;
		var right:Boolean = false;
		var left:Boolean = false;
 
		var upS:Number = 1;
		var downS:Number = 1;
		var rightS:Number = 1;
		var leftS:Number = 1;
 
		public function Movement(c:MovieClip)
		{
			cub = c;
			this.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
			this.addEventListener(KeyboardEvent.KEY_UP, onKU);
			cub.addEventListener(Event.ENTER_FRAME, onMoveHero);
		}
 
		public function onKD(e:KeyboardEvent):void
		{
			if (e.keyCode == 37)
			{
				left = true;
				trace("12312")
			}
			if (e.keyCode == 38)
			{
				up = true;
			}
			if (e.keyCode == 39)
			{
				right = true;
			}
			if (e.keyCode == 40)
			{
				down = true;
			}
		}
 
		public function onKU(e:KeyboardEvent):void
		{
			if (e.keyCode == 37)
			{
				left = false;
			}
			if (e.keyCode == 38)
			{
				up = false;
			}
			if (e.keyCode == 39)
			{
				right = false;
			}
			if (e.keyCode == 40)
			{
				down = false;
			}
		}
 
		public function onMoveHero(e:Event):void
		{
			if (left)
			{
				trace("left");
				cub.x -=  leftS;
				leftS++;
			}
			else
			{
				cub.x -=  leftS;
				leftS *=  .7;
			}
			if (up)
			{
				cub.y -=  upS;
				upS++;
			}
			else
			{
				cub.y -=  upS;
				upS *=  .7;
			}
			if (right)
			{
				cub.x +=  rightS;
				rightS++;
			}
			else
			{
				cub.x +=  rightS;
				rightS *=  .7;
			}
			if (down)
			{
				cub.y +=  downS;
				downS++;
			}
			else
			{
				cub.y +=  downS;
				downS *=  .7;
			}
		}
 
	}
 
}
 
/* В исходнике fla пишешь: var movement:Movement = new Movement(cub); //В качестве аргумента название твоего героя.
*/

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

Регистрация: Jul 2013
Сообщений: 6
Сделал все, как вы сказали, но все равно не пашет))
Я еще импортировал события (в тот раз забыл).
Прикреплю файлы.

Старый 04.07.2013, 17:18
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 4  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
А где файлы искать?

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

Регистрация: Jul 2013
Сообщений: 6
.fla
.as

Старый 04.07.2013, 17:49
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 6  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Вот архив с Вашим кодом, обратите внимание , когда откроете .fla в свойствах сцены и в поле Class заданно имя класса(это так называемый класс входа в программу).Ну соответственно пришлось подправить и ваш класс.
Вложения
Тип файла: rar Движение.rar (5.0 Кб, 41 просмотров)

Старый 04.07.2013, 21:15
bes4etnov вне форума Посмотреть профиль Отправить личное сообщение для bes4etnov Найти все сообщения от bes4etnov
  № 7  
Ответить с цитированием
bes4etnov

Регистрация: Jul 2013
Сообщений: 6
Спасибо за помощь!
Правда это получается класс, который запускается вместе с программой; а как можно сделать объект со свойствами этого класса (то есть можно было создавать несколько таких объектов и давать им разные имена, например)?

Старый 04.07.2013, 21:59
belv вне форума Посмотреть профиль Отправить личное сообщение для belv Найти все сообщения от belv
  № 8  
Ответить с цитированием
belv
[+1 16.07.13]
[+4 16.07.13]

Регистрация: Oct 2005
Сообщений: 217
Берете символ в библиотеке ,нажимаете правой кнопкой мыши , в списке выбираете свойства , и в поле базового класса вместо flash.display.MovieClip пишите имя своего класса , с требуемыми свойствами.чтобы создать экземпляр этого мувика , пишите так как вы писали
var cub = new Cub();
addChild(cub);
Он будет обладать всем тем что вы напишете в классе.

Старый 05.07.2013, 14:42
bes4etnov вне форума Посмотреть профиль Отправить личное сообщение для bes4etnov Найти все сообщения от bes4etnov
  № 9  
Ответить с цитированием
bes4etnov

Регистрация: Jul 2013
Сообщений: 6
Спасибо, что объяснили)!!

Старый 16.07.2013, 20:43
bes4etnov вне форума Посмотреть профиль Отправить личное сообщение для bes4etnov Найти все сообщения от bes4etnov
  № 10  
Ответить с цитированием
bes4etnov

Регистрация: Jul 2013
Сообщений: 6
Блин. У меня все равно не получилось так как вы сказали..
Я переписал заново:
.fla
.as
Помогите разобраться, почему не работает програмка.. МувиКлип просто стоит на месте..
Это чем-то связанно со слушателями событий клавиатуры.. Они не работают, не знаю, почему...

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

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

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


 


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


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