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

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

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

Регистрация: Jul 2005
Адрес: Steam/Mobiles
Сообщений: 790
Отправить сообщение для Badim с помощью ICQ Отправить сообщение для Badim с помощью AIM Отправить сообщение для Badim с помощью MSN Отправить сообщение для Badim с помощью Skype™
По умолчанию Управление в игре на клавиатуре.как справиться с .onKeyUp .onKeyDown?

Здравствуйте.
пишу(точнее уже почти доделал) игру скролер(типа марио).
Игра придназначаеться для web.
для управления с клавиатуры след код:
Код:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
	switch (Key.getCode()) {
	case Key.RIGHT :
		_root.main.game.move(1);
		break;
	case Key.LEFT :
		_root.main.game.move(-1);
		break;
	case Key.SPACE :
		_root.main.game.jump_char();
		break;
	}
};
keyListener.onKeyUp = function() {
	switch (Key.getCode()) {
	case Key.RIGHT :
		_root.main.game.shar_stop();
		break;
	case Key.LEFT :
		_root.main.game.shar_stop();
		break;
	}
};
Key.addListener(keyListener);
И возникла проблема:
что если бежать, потом прыгнуть, а потом отпустить влево(или право), то персонаж бежит дальше. Вроде как пробел вызывает onKeyUp, и после этого, отпускание другой клавиши - onKeyUp уже не работает.

сама игра:
http://ya-zvezda.ru/turtle/main.html
200кб

Старый 12.01.2006, 13:22
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 2  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
а че так тормозит бешенно?

Старый 12.01.2006, 13:23
Badim вне форума Посмотреть профиль Отправить личное сообщение для Badim Посетить домашнюю страницу Badim Найти все сообщения от Badim
  № 3  
Ответить с цитированием
Badim

Регистрация: Jul 2005
Адрес: Steam/Mobiles
Сообщений: 790
Отправить сообщение для Badim с помощью ICQ Отправить сообщение для Badim с помощью AIM Отправить сообщение для Badim с помощью MSN Отправить сообщение для Badim с помощью Skype™
а какой комп?
З.Ы. на 1.2 ГГерца и 256 оперативки - идет так как надо.
=)
З.Ы.Ы.
пожалуста, игра не для обсуждения, она не доделана, хотелось бы решить вопрос по коду.

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

Регистрация: Nov 2003
Адрес: Север
Сообщений: 244
А не пробовал 2 Listener'a для движения и прыжка создавать?
__________________
Scio me, nihil scire.

Старый 12.01.2006, 13:33
motor4ik вне форума Посмотреть профиль Отправить личное сообщение для motor4ik Посетить домашнюю страницу motor4ik Найти все сообщения от motor4ik
  № 5  
Ответить с цитированием
motor4ik
 
Аватар для motor4ik

Регистрация: Jun 2005
Адрес: Moscow - immigrate from Volgodonsk
Сообщений: 2,534
ну да я тоже думаю что эта проблема не так сложна...просто нужно подумать...:=)

Старый 12.01.2006, 13:55
Badim вне форума Посмотреть профиль Отправить личное сообщение для Badim Посетить домашнюю страницу Badim Найти все сообщения от Badim
  № 6  
Ответить с цитированием
Badim

Регистрация: Jul 2005
Адрес: Steam/Mobiles
Сообщений: 790
Отправить сообщение для Badim с помощью ICQ Отправить сообщение для Badim с помощью AIM Отправить сообщение для Badim с помощью MSN Отправить сообщение для Badim с помощью Skype™
да
пробывал.
проблема осталась

Старый 12.01.2006, 15:15
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 7  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
по ходу получается, что onKeyUp генерится когда все клавиши отпущены, т.е. отследить с его помощбю последовательное отжатие не судьба..
как вариант: заставить мувик следить за нажатием/отжатием, ну и сообщать об изменениях:
Код:
import mx.events.EventDispatcher;
//сщздаем мувик, который будет следить за клавишами RIGHT, LEFT & SPACE
this.createEmptyMovieClip('keyDispatcher',this.getNextHighestDepth());
keyDispatcher.keys={r:false,l:false,s:false};//для контроля
EventDispatcher.initialize(keyDispatcher);//копируем в него методы диспатчера

keyDispatcher.onEnterFrame=function(){
	var k=this.keys;
	//если состояние клавиши меняется, то рапортуем (вещаем событие 'key')
	if(k.r!=Key.isDown(Key.RIGHT)){ 
		this.dispatchEvent({type:'key',what:k.r ? 'up' : 'down',key:'right',time:getTimer()});
	}
	if(k.l!=Key.isDown(Key.LEFT)){ 
		this.dispatchEvent({type:'key',what:k.l ?  'up' : 'down',key:'left',time:getTimer()});
	}
	if(k.s!=Key.isDown(Key.SPACE)){ 
		this.dispatchEvent({type:'key',what:k.s ? 'up' : 'down',key:'space',time:getTimer()});
	}
	this.keys={r:Key.isDown(Key.RIGHT),l:Key.isDown(Key.LEFT),s:Key.isDown(Key.SPACE)};
}
//подписываем функцию onKey, на прослушку события 'key'
keyDispatcher.addEventListener('key',onKey);
//теперь всегда знаем когда, какую и что сделали(нажали/отпустили)...
function onKey(e){
	trace('________');
	trace('when :'+e.time);
	trace('key :'+e.key+' ('+e.what+')');
	
}

Старый 12.01.2006, 15:36
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в догонку: как отследить тоже самое для всех клавиш
Код:
import mx.events.EventDispatcher;
this.createEmptyMovieClip('keyDispatcher',this.getNextHighestDepth());
//пихаем в массив все коды (вообще-то это лишнее: зачем перебирать то, что не нужно..
for(var i=0,k=keyDispatcher.keys=[];i<255;i++)k.push(false);
EventDispatcher.initialize(keyDispatcher);//копируем в него методы диспатчера
keyDispatcher.onEnterFrame=function(){
	var k=this.keys;
	for(var i in k){
		//если состояние клавиши меняется, то рапортуем (вещаем событие 'key')
		if(k[i]!=Key.isDown(i)) this.dispatchEvent({type:'key',what:k[i] ? 'up' : 'down',key:i,time:getTimer()});
		k[i]=Key.isDown(i);
	}
}
keyDispatcher.addEventListener('key',onKey);
function onKey(e){
	trace('________');
	trace('when :'+e.time);
	trace('key# :'+e.key+' ('+e.what+')');
}

Старый 12.01.2006, 16:45
Badim вне форума Посмотреть профиль Отправить личное сообщение для Badim Посетить домашнюю страницу Badim Найти все сообщения от Badim
  № 9  
Ответить с цитированием
Badim

Регистрация: Jul 2005
Адрес: Steam/Mobiles
Сообщений: 790
Отправить сообщение для Badim с помощью ICQ Отправить сообщение для Badim с помощью AIM Отправить сообщение для Badim с помощью MSN Отправить сообщение для Badim с помощью Skype™
Это тоже хороший код.
но у него есть проблема - во первых какието странные баги =)
а во вторых, что очень важно, в Броузере он не работает(в дебагере рабоатет, а вот в броузере ну ни как) =(((
или я что то забыл сделать еще?

Старый 12.01.2006, 17:00
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
какие баги ? ,ну кроме того, что странные..
в браузере там и нечему работать..,
собственно это только способ решения твоей проблемы, как ты его применишь вопрос другой..
зы: еще, не пиши так
Код:
switch (Key.getCode()) {
	case Key.RIGHT :
		_root.main.game.shar_stop();
		break;
	case Key.LEFT :
		_root.main.game.shar_stop();
		break;
}
будь проще : _root.main.game.shar_stop();

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

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

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


 


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


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