flashCS4中AS3.0文件写下下面这段代码..但是为什么角色不能移动..也没有报错..? 求指导啊..

package{importflash.events.KeyboardEvent;importflash.events.Event;importflash.display... package {
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.Sprite;
public class Move extends Sprite {
var key:Object=new Object();
private var speed:int=20;
private function keyDown(event:KeyboardEvent):void {
key[event.keyCode]=true;
//当按下制订键时,定义相应的key对象为真
}
private function keyUp(event:KeyboardEvent):void {
delete key[event.keyCode];
//案件释放则将相应键的key对象删除
}
private function PMove(event:Event):void {
const Key_LEFT:uint=65;
const Key_RIGHT:uint=66;
//定义左右方向键的键控代码
if (key[Key_LEFT]) {
//如果按下左方向键
P.x-=speed;
//角色沿x轴方向向左移动
}
if (key[Key_RIGHT]) {
//如果按下右方向键
P.x+=speed;
//角色沿x轴向右移动
}
}
}
}
我还没有加之前真的没有加侦听器..
具体要怎么加.加在哪?
private function M(){
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUp);
stage.addEventListener(Event.ENTER_FRAME,PMove);
}
这样可以吗?
展开
 我来答
水无月星惜
2011-04-05 · TA获得超过122个赞
知道答主
回答量:89
采纳率:0%
帮助的人:123万
展开全部
package {
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.display.Sprite;
public class Move extends Sprite {
var key:Object=new Object();
private var speed:int=20;

public function Move(){
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUp);
stage.addEventListener(Event.ENTER_FRAME,PMove);
}

private function keyDown(event:KeyboardEvent):void {
key[event.keyCode]=true;
//当按下制订键时,定义相应的key对象为真
}
private function keyUp(event:KeyboardEvent):void {
delete key[event.keyCode];
//案件释放则将相应键的key对象删除
}
private function PMove(event:Event):void {
const Key_LEFT:uint=65;
const Key_RIGHT:uint=66;
//定义左右方向键的键控代码
if (key[Key_LEFT]) {
//如果按下左方向键
P.x-=speed;
//角色沿x轴方向向左移动
}
if (key[Key_RIGHT]) {
//如果按下右方向键
P.x+=speed;
//角色沿x轴向右移动
}
}
}
}

/**********************************************************************************************
如楼上所说,你没有侦听事件,这里我把侦听事件加在constructor里面了
这个类是你自己写的吗?奇怪的是,封装得挺好的一个类,这样一来就只适用于移动对象一开始就在舞台上的情形
为什么做成适用舞台的类,而不做成适用元件的类呢?那样重复利用率更高
*/

/****************************************************
以下我修改了一下,使它成为适用元件的类
package {
import flash.events.*;
import flash.display.*;
public class Move extends MovieClip {
var key:Object=new Object();
private var speed:int=20;
private var sta:Stage;

public function Move(s:Stage){
sta = s;
sta.addEventListener(KeyboardEvent.KEY_DOWN,keyDown);
sta.addEventListener(KeyboardEvent.KEY_UP,keyUp);
sta.addEventListener(Event.ENTER_FRAME,PMove);
}

private function keyDown(event:KeyboardEvent):void {
key[event.keyCode]=true;
//当按下制订键时,定义相应的key对象为真
}
private function keyUp(event:KeyboardEvent):void {
delete key[event.keyCode];
//案件释放则将相应键的key对象删除
}
private function PMove(event:Event):void {
const Key_LEFT:uint=65;
const Key_RIGHT:uint=66;
//定义左右方向键的键控代码
if (key[Key_LEFT]) {
//如果按下左方向键
this.x-=speed;
//角色沿x轴方向向左移动
}
if (key[Key_RIGHT]) {
//如果按下右方向键
this.x+=speed;
//角色沿x轴向右移动
}
}
}
}

*********************************
使用这个类的时候,在主舞台写
var test:Move = new Move(stage);
addChild(test);

********************************
这样的结构使你主舞台的代码更简洁,便于拓展程序内容
*/
追问
敢问大侠QQ多少?我想请教你..这里太不方便了.还有很多问题.感激不尽
追答
给你发百度信息了
开发者之路
2011-04-05 · TA获得超过910个赞
知道大有可为答主
回答量:2031
采纳率:0%
帮助的人:930万
展开全部
你只是定义了事件处理函数,却没有侦听该事件,当然不会移动,也不会出错了。
加上以下几句:
this.addEventListener(Event.KeyboardEvent,keyDown);
this.addEventListener(Event.KeyboardEvent,keyUp);
并注册PMove事件

参考资料: http://www.bjzero.net

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tcjinr20
2011-04-05 · TA获得超过211个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:183万
展开全部
奇怪的是你没有监听事件, 还是省略没贴
const Key_LEFT:uint=65;
const Key_RIGHT:uint=66;放到函数外虽然无关要紧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式