Просмотр полной версии : не работает управление с клавиатуры
написал значит я функцию которая должна управлять мувиком с клавиатуры. Вот код:
package ru.RainbowAdventure.Characters
{
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import flash.utils.*;
import flash.text.*;
public class Hero extends MovieClip
{
public static var ball:MovieClip;
public var container_hero:MovieClip;
public function Hero()
{
addHero();
addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
trace("Hero initialized...");
}
private function addHero()
{
container_hero = new MovieClip();
ball = new Hero_mc ;
ball.x = 36;
ball.y = 443;
ball.gotoAndStop(1);
addChild(container_hero);
container_hero.addChild(ball);
trace("Hero showed...");
}
public function keyControl(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.LEFT)
{
ball.x -= 3;
}
if (e.keyCode == Keyboard.RIGHT)
{
ball.x += 3;
}
if (e.keyCode == Keyboard.DOWN)
{
ball.y += 3;
}
if (e.keyCode == Keyboard.UP)
{
ball.y -= 3;
}
trace("key control initialized...");
}
}
}
она не работает. протрейсил функция keyControl не вызывается. в чем проблема не нашел. может кто помочь? Пожалуйста
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
так вылетает ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
\Hero.as:18]
Угу, ведь stage появляется после добавления в список отображения.
public function Hero()
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
addHero();
addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
trace("Hero initialized...");
}
хм. так всеравно не работает. функция keyControl не появляется, не трейсится
tsarapkabel
08.01.2011, 19:11
Покажите обновлённый код. Должно работать.
package ru.RainbowAdventure.Characters
{
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import flash.utils.*;
import flash.text.*;
public class Hero extends MovieClip
{
public static var ball:MovieClip;
public var container_hero:MovieClip;
public function Hero()
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
addHero();
addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
trace("Hero initialized...");
}
private function addHero()
{
container_hero = new MovieClip();
ball = new Hero_mc ;
ball.x = 36;
ball.y = 443;
ball.gotoAndStop(1);
addChild(container_hero);
container_hero.addChild(ball);
trace("Hero showed...");
}
private function keyControl(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.LEFT)
{
ball.x -= 3;
}
if (e.keyCode == Keyboard.RIGHT)
{
ball.x += 3;
}
if (e.keyCode == Keyboard.DOWN)
{
ball.y += 3;
}
if (e.keyCode == Keyboard.UP)
{
ball.y -= 3;
}
trace("Key control initialized...");
}
}
}
вот
tsarapkabel
08.01.2011, 19:26
Вот так у меня проходит инициализация:
package {
import flash.display.MovieClip;
import flash.events.*;
/*
@author soniko
*/
public class Hero extends MovieClip {
public function Hero() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
}
public function keyControl(e:KeyboardEvent):void {
trace("key control initialized...");
}
}
}
то есть у вас все работает? а какая версия флеша и его настройки?
мдаам странно. может подскажете почему у меня может функция keyControl не инициализироваться?
tsarapkabel
08.01.2011, 19:51
Вот рабочий код на вашем примере
package {
import flash.display.*;
import flash.events.*;
import flash.ui.*;
import flash.utils.*;
import flash.text.*;
/*
@author soniko
*/
public class Hero extends MovieClip {
public static var ball:Shape;
public var container_hero:MovieClip;
public function Hero() {
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
addHero();
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);
trace("Hero initialized...");
}
private function addHero():void {
container_hero = new MovieClip();
ball = new Shape();
ball.graphics.lineStyle (5, 0xFF0000);
ball.graphics.drawCircle (36, 443, 20);
container_hero.addChild(ball);
this.addChild(container_hero);
trace("Hero showed...");
}
private function keyControl(e:KeyboardEvent):void {
if (e.keyCode == Keyboard.LEFT) {
ball.x -= 3;
}
if (e.keyCode == Keyboard.RIGHT) {
ball.x += 3;
}
if (e.keyCode == Keyboard.DOWN) {
ball.y += 3;
}
if (e.keyCode == Keyboard.UP) {
ball.y -= 3;
}
trace("Key control initialized...");
}
}
}
FlashDevelop и 10-й дебаг плеер.
а Ваш работает. спасибо огромное
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.