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

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

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

Регистрация: Apr 2010
Сообщений: 219
используйте таймер с проверкой на факт нажатия кнопки

Старый 13.10.2010, 20:56
Byrger вне форума Посмотреть профиль Отправить личное сообщение для Byrger Найти все сообщения от Byrger
  № 12  
Ответить с цитированием
Byrger

Регистрация: Jul 2010
Сообщений: 51
Извините для меня AS это что-то новое после PHP, ия плохо разбираюсь в таймерах и других примочках (в евентах вроде уже немного вникаю)
Прошу на примерах описывать, пожалуйста

Старый 13.10.2010, 21:38
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 13  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Если попроще: по нажатию кнопки просто ставьте флаг "объект движется вперёд" при отпускании "объект стоит". и по энерфрэму в соответствии с флагом двигайте объект.
В mvc конценпции: мы слушаем событие от клавиатуры по которому изменяем модель (направление движения объекта)
сам объект слушает эту модель и двигается (либо просто меняет направление движения)
__________________
Отряд Котовскага

Старый 13.10.2010, 21:40
Zik. вне форума Посмотреть профиль Отправить личное сообщение для Zik. Найти все сообщения от Zik.
  № 14  
Ответить с цитированием
Zik.
 
Аватар для Zik.

Регистрация: Nov 2007
Сообщений: 1,724
Код AS3:
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
///
private var pressedSpace:Boolean = false;
private function init():void {
	stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
	stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
}
 
private function keyUpHandler(e:KeyboardEvent):void {
	if (e.keyCode == Keyboard.SPACE) {
		pressedSpace = false;
	}
}
 
private function keyDownHandler(e:KeyboardEvent):void {
	if (e.keyCode == Keyboard.SPACE) {
		addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		pressedSpace = true;
	}
}
 
private function enterFrameHandler(e:Event):void {
	if (pressedSpace) {
		object.x += 5;
	} else {
		removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
	}
}

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Странный подход. Почему бы не отписываться от ENTER_FRAME прямо в keyUpHandler?

Старый 13.10.2010, 21:49
Zik. вне форума Посмотреть профиль Отправить личное сообщение для Zik. Найти все сообщения от Zik.
  № 16  
Ответить с цитированием
Zik.
 
Аватар для Zik.

Регистрация: Nov 2007
Сообщений: 1,724
Тогда смысл переменной теряется)

Старый 13.10.2010, 22:01
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 17  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Ну и переменную уберём. Лишняя переменная - это хорошо?

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

Регистрация: Jul 2007
Адрес: Гражданин Российской Федерации
Сообщений: 1,122
Отправить сообщение для KiL33 с помощью ICQ
тута
http://www.flasher.ru/forum/showthre...FF%E7%E0%F2%FC

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

Регистрация: Jul 2010
Адрес: 50° 27′ 0″ N, 30° 30′ 0″ E
Сообщений: 256
Записей в блоге: 2
гыыы

Код AS3:
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
 
    /**
     * ...
     * @author 1
     */
    public class Main extends Sprite 
    {
        private var tank:Sprite;
 
        private var dx:Number;
        private var dy:Number;
 
 
        private function CreateTank():void {
            tank = new Sprite();
 
            tank.graphics.beginFill(0x800000);
            tank.graphics.drawRoundRect( -15, -20, 30, 40, 5);
 
            tank.graphics.beginFill(0x999999);
            tank.graphics.drawRect( -3, -25, 6, 25);
 
            tank.graphics.beginFill(0xbbbbbb);
            tank.graphics.drawRect( -5, -30, 10, 7);
 
            tank.graphics.beginFill(0xFF0000);
            tank.graphics.drawCircle(0, 0, 10);
            tank.graphics.endFill();
            stage.addChild(tank);
            tank.x = stage.stageWidth / 2;
            tank.y = stage.stageHeight / 2;
        }
 
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            CreateTank();
            dx = 0;
            dy = 0;
            stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
            stage.addEventListener(KeyboardEvent.KEY_UP, KeyDePressed);
            stage.addEventListener(Event.ENTER_FRAME, TankMove)
 
        }
 
        private function TankMove(e:Event):void {
 
 
            if (dx == 0 && dy == -1) { tank.rotation = 0 };
            if (dx == 1 && dy == -1) { tank.rotation = 45 };
            if (dx == 1 && dy == 0) { tank.rotation = 90 };
            if (dx == 1 && dy == 1) { tank.rotation = 135 };
            if (dx == 0 && dy == 1) { tank.rotation = 180 };
            if (dx == -1 && dy == 1) { tank.rotation = 225 };
            if (dx == -1 && dy == 0) { tank.rotation = 270 };
            if (dx == -1 && dy == -1) { tank.rotation = 315 };                        
 
 
            var c:Number = 5;
 
            if (dx != 0 && dy != 0) {
                c = Math.sqrt(c * c + c * c) / 2;
            }
 
            tank.x += dx * c;
            tank.y += dy * c;
 
            if (tank.x < 0) { tank.x += stage.stageWidth; }
            if (tank.y < 0) { tank.y += stage.stageHeight; }
            if (tank.x > stage.stageWidth) { tank.x -= stage.stageWidth; }
            if (tank.y > stage.stageHeight) { tank.y -= stage.stageHeight; }
 
        }
 
        private function KeyPressed(e:KeyboardEvent):void {
            var keyCode:Number = e.keyCode;
 
            if (keyCode == 39 || keyCode == 68) {
                dx = 1;
            }
 
            if (keyCode == 37 || keyCode == 65) {
                dx = -1;
            }
 
            if (keyCode == 38 || keyCode == 87) {
                dy = -1;
            }
 
            if (keyCode == 40 || keyCode == 83) {
                dy = 1;
            }
        }
 
        private function KeyDePressed(e:KeyboardEvent):void {
            var keyCode:Number = e.keyCode;
 
            if (keyCode == 39 || keyCode == 68) {
                dx = 0;
            }
 
            if (keyCode == 37 || keyCode == 65) {
                dx = 0;
            }
 
            if (keyCode == 38 || keyCode == 87) {
                dy = 0;
            }
 
            if (keyCode == 40 || keyCode == 83) {
                dy = 0;
            }
        }
 
    }
 
}
Вложения
Тип файла: swf tankmove.swf (1.8 Кб, 38 просмотров)

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
гыыы
Неа. Совсем не гы. Правильнее будет диспатчить по ENTER_FRAME свое событие (MOVE например, или что-то еще) если хотя бы одна клавиша нажата. + Контроллер должен уметь отдавать список нажатых клавиш. По этим клавишам уже и строится скорость движения объекта (то есть если зажаты влево и вправо, то скорость по у должна быть нуль, а не по последней нажатой клавише)
__________________
...вселенская грусть

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

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

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


 


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


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