PDA

Просмотр полной версии : не работает управление с клавиатуры


reNiks
08.01.2011, 18:13
написал значит я функцию которая должна управлять мувиком с клавиатуры. Вот код:
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 не вызывается. в чем проблема не нашел. может кто помочь? Пожалуйста

Bgg
08.01.2011, 18:16
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);

reNiks
08.01.2011, 18:25
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyControl);

так вылетает ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
\Hero.as:18]

Bgg
08.01.2011, 18:29
Угу, ведь 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...");
}

reNiks
08.01.2011, 18:40
хм. так всеравно не работает. функция keyControl не появляется, не трейсится

tsarapkabel
08.01.2011, 19:11
Покажите обновлённый код. Должно работать.

reNiks
08.01.2011, 19:22
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...");
}
}
}

reNiks
08.01.2011, 19:33
то есть у вас все работает? а какая версия флеша и его настройки?
мдаам странно. может подскажете почему у меня может функция 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-й дебаг плеер.

reNiks
08.01.2011, 19:54
а Ваш работает. спасибо огромное