返回列表 回复 发帖

游戏的基本操作(上下左右)

在AS2中很容易实现的代码,在AS3中不知道怎么搞了,一天了,郁闷的不得了
求求高手帮我把下面这段代码转成AS3,谢谢!

AS2中的参考代码如下:

var speed = 4;//定义移动的速度

mc.onEnterFrame = function()
{
      if (Key.isDown(Key.LEFT))
     {
           this._x -= speed;
      }
      if (Key.isDown(Key.RIGHT))
     {
           this._x += speed;
      }
      if (Key.isDown(Key.UP))
      {
            this._y -= speed;
       }
       if (Key.isDown(Key.DOWN))
      {
            this._y += speed;
       }
};

[ 本帖最后由 zhu5439peng 于 2007-11-20 13:06 编辑 ]
:(
this.addEventListener(KeyboardEvent.KEY_DOWN,goto);
stage.focus = this;
function goto(event:KeyboardEvent){
        if(event.keyCode == Keyboard.DOWN){
                _mc.y+=10;
        }else if(event.keyCode == Keyboard.UP){
                _mc.y-=10;
        }else if(event.keyCode == Keyboard.LEFT){               
                _mc.x-=10;
        }else if(event.keyCode == Keyboard.RIGHT){
                _mc.x+=10;
        }
}
谢谢,唉,AS3的教学书是看完了,可是写不出东西,郁闷啊 !!
:Q
---oo------------------------------------------------------
俺已经用三写点东东了 :lol
我用AS3开发过扎金花的客户端!但基本上是用AS2的方法来解决的!
只不过换成AS3的代码!了解也不多!不过查一下手册就差不多知道怎么回事了!加油吧!AS3不难!
我也来写发一个按键的,无按钮按下的时候不进行真检测,省资源~
//Key.as
  1. package CYPL.Game{
  2. import flash.display.InteractiveObject;
  3. import flash.events.KeyboardEvent;
  4. import flash.events.Event;
  5. public class Key {
  6.   private static  var keyObj:Object;
  7.   private static  var io:InteractiveObject;
  8.   private static  var keyTestHandler:Function;
  9.   public static function init(io:InteractiveObject,keyTestHandler:Function):void {
  10.    Key.io=io;
  11.    Key.keyTestHandler=keyTestHandler;
  12.    keyObj=new Object  ;
  13.    io.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  14.    io.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
  15.   }
  16.   public static function isDown(key:int):Boolean {
  17.    return !!keyObj[key];
  18.   }
  19.   private static function keyDownHandler(e:KeyboardEvent):void {
  20.    keyObj[e.keyCode]=true;
  21.    io.addEventListener(Event.ENTER_FRAME,keyTestHandler);
  22.   }
  23.   private static function keyUpHandler(e:KeyboardEvent):void {
  24.    delete keyObj[e.keyCode];
  25.    keyObjHasProperty()?removeKeyTestHandler():null;
  26.   }
  27.   private static function keyObjHasProperty():Boolean {
  28.    for each (var j:Boolean in keyObj) {
  29.     if (j) {
  30.      return false;
  31.     }
  32.    }
  33.    return true;
  34.   }
  35.   private static function removeKeyTestHandler():void {
  36.    io.removeEventListener(Event.ENTER_FRAME,keyTestHandler);
  37.   }
  38.   public static function get KeyObj():Object {
  39.    return Key.keyObj;
  40.   }
  41. }
  42. }
复制代码
使用:
  1. import CYPL.Game.Key;
  2. var box:Sprite;
  3. with (box=Sprite(addChild(new Sprite))) {
  4. graphics.beginFill(0xff0000);
  5. graphics.drawRect(100,100,100,100);
  6. }
  7. Key.init(stage,keyTestHandler);
  8. function keyTestHandler(e:Event) {
  9. if (Key.isDown(Keyboard.LEFT)) {
  10.   box.x-=5;
  11. }
  12. if (Key.isDown(Keyboard.RIGHT)) {
  13.   box.x+=5;
  14. }
  15. if (Key.isDown(Keyboard.DOWN)) {
  16.   box.y+=5;
  17. }
  18. if (Key.isDown(Keyboard.UP)) {
  19.   box.y-=5;
  20. }
  21. }
复制代码
[ 本帖最后由 ycccc8202 于 2007-11-21 11:13 编辑 ]

key.rar (5.76 KB)

喜帖街my blog
return !!keyObj[key];
这招强啊
http://imfool.cn/im.html
帮忙点击一下: http://www.589108.com/zr?id=1164
强,谢谢:kiss:

呵呵,我与楼主遇到相似的问题

及时雨啊
return !!keyObj[key]; 。。。
keyObj[key] 为 false 时两个逻辑非起了什么作用呢?不明白啊不明白。。。。。。。逻辑非有什么隐含的规则么?。。。
返回列表