发新话题
打印

[分享] 简单的物体二段跳效果

简单的物体二段跳效果

复制内容到剪贴板
代码:
package {
/*author : CYPL*/
        import flash.display.*;
        import flash.events.*;
        import flash.utils.Timer;
        public class JumpTest extends Sprite {
                private static  const G:int=1;
                private var box:Sprite;
                private var landObject:Sprite;
                private var ySpeed:int=0;
                private var jumpSpeed:int=-15;
                private var keyPressed:Boolean= false;
                private var keyReleased:Boolean=true;
                private var comboJump:Boolean=false;
                private var inAir:Boolean=true;
                private var timer:Timer;
                public function JumpTest() {
                        box=drawRect((stage.stageWidth-50)/2,100,50,50,0xff0000);
                        landObject=drawRect(0,300,stage.stageWidth,20);
                        (timer=new Timer(30)).start();
                        configureControl();
                }
                private function configureControl():void {
                        stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler,false,0,true);
                        stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler,false,0,true);
                        timer.addEventListener(TimerEvent.TIMER,timerHandler,false,0,true);

                }
                private function drawRect(posX:Number,posY:Number,w:Number,h:Number,color:uint=0):Sprite {
                        var rect:Sprite;
                        with (rect=new Sprite) {
                                graphics.beginFill(color);
                                graphics.drawRect(0,0,w,h);
                                x=posX;
                                y=posY;
                        }
                        return Sprite(addChild(rect));
                }
                private function keyDownHandler(evt:KeyboardEvent):void {
                        keyReleased && inAir && !comboJump&&(comboJump=true,ySpeed=jumpSpeed,trace("comboJump"));
                        !keyPressed&&(keyPressed=true,inAir=true,ySpeed=jumpSpeed,timer.start());
                        keyReleased=false;
                }
                private function keyUpHandler(evt:KeyboardEvent):void {
                        keyReleased=true;
                        ySpeed<-5&&(ySpeed+=8)&&ySpeed>0&&ySpeed=0;
                }
                private function timerHandler(evt:TimerEvent):void {
                        evt.updateAfterEvent();
                        ySpeed+=G;
                        box.y+=ySpeed;
                        ySpeed>0&&(box.hitTestObject(landObject))&&(trace(landObject.y),box.y=landObject.y-box.height,timer.stop(),keyPressed=false,inAir=false,comboJump=false);
                }



        }
}
//文档类,fla中设置下就能看到效果


灰常灰常简单的效果,按任意键进行方块的跳跃,有二段跳效果和轻跳和重跳效果,根据按键长短判定的.

这是在兄弟会论坛做的一道题,很应该转来跟大家分享下~

[ 本帖最后由 ycccc8202 于 2008-4-7 23:16 编辑 ]

附件

JumpTest.swf (1.25 KB)

2008-4-7 23:14, 下载次数: 297

寻觅终生伴侣!

my blog

TOP

不错!!佩服,想起了超级玛丽

TOP

呵呵,羡慕lz有时间和能力做这个啊。也看到了,也想去做做。

TOP

keyReleased && inAir && !comboJump&&(comboJump=true,ySpeed=jumpSpeed,trace("comboJump"));
不懂
分享是一种快乐,交流才可以提高

TOP

引用:
原帖由 ycccc8202 于 2008-4-7 23:12 发表
package {
/*author : CYPL*/
        import flash.display.*;
        import flash.events.*;
        import flash.utils.Timer;
        public class JumpTest extends Sprite {
                privat ...
“春春”,应该叫“天地会”吧?谷歌与百度用它才能搜索到
   我来作个简略的注释:

package {
/*author : CYPL*/
        import flash.display.*;
        import flash.events.*;
        import flash.utils.Timer;
        public class JumpTest extends Sprite {
                private static  const G:int=1;//第七行到十一行声明私有变量
                private var box:Sprite;
                private var landObject:Sprite;
                private var ySpeed:int=0;
                private var jumpSpeed:int=-15;
                private var keyPressed:Boolean= false;
                private var keyReleased:Boolean=true;
                private var comboJump:Boolean=false;
                private var inAir:Boolean=true;
                private var timer:Timer;
                public function JumpTest() {//构造函数方法
                        box=drawRect((stage.stageWidth-50)/2,100,50,50,0xff0000);//传递drawRect方法参数
                        landObject=drawRect(0,300,stage.stageWidth,20);//同上
                        (timer=new Timer(30)).start();//设置定时器
                        configureControl();//绑定configureControl
                }
                private function configureControl():void {
                        stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler,false,0,true);
                        stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler,false,0,true);
                        timer.addEventListener(TimerEvent.TIMER,timerHandler,false,0,true);
                }
    //画矩形
                private function drawRect(posX:Number,posY:Number,w:Number,h:Number,color:uint=0):Sprite {
                        var rect:Sprite;
                        with (rect=new Sprite) {
                                graphics.beginFill(color);
                                graphics.drawRect(0,0,w,h);
                                x=posX;
                                y=posY;
                        }
                        return Sprite(addChild(rect));
                }
    //keyDown与keyUp方法根据布尔值运行定时器并设置变量ySpeed
                private function keyDownHandler(evt:KeyboardEvent):void {
                        keyReleased && inAir && !comboJump&&(comboJump=true,ySpeed=jumpSpeed,trace("comboJump"));
                        !keyPressed&&(keyPressed=true,inAir=true,ySpeed=jumpSpeed,timer.start());
                        keyReleased=false;
                }
                private function keyUpHandler(evt:KeyboardEvent):void {
                        keyReleased=true;
                        ySpeed<-5&&(ySpeed+=8)&&ySpeed>0&&ySpeed=0;
                }
                private function timerHandler(evt:TimerEvent):void {
                        evt.updateAfterEvent();
                        ySpeed+=G;
                        box.y+=ySpeed;
                        ySpeed>0&&(box.hitTestObject(landObject))&&(trace(landObject.y),box.y=landObject.y-box.height,timer.stop(),keyPressed=false,inAir=false,comboJump=false);
                }

        }
}

[ 本帖最后由 烟波浩渺 于 2008-4-8 16:36 编辑 ]
佛拉稀 http://space.flash8.net/space/?609943

TOP

哈哈,谢谢楼上的朋友帮忙简单注释!
寻觅终生伴侣!

my blog

TOP

老师我还是没看懂这句

TOP

keyReleased && inAir && !comboJump&&(comboJump=true,ySpeed=jumpSpeed,trace("comboJump"));  这句最后那点怎么个理解啊  (comboJump=true,ySpeed=jumpSpeed,trace("comboJump"));

TOP

ySpeed<-5 && (ySpeed+=8) && ySpeed>0 && (ySpeed=0);

这句也不理解

TOP

if ( keyReleased ) {
        if (inAir) {
                if (!comboJump) {
                        comboJump=true,ySpeed=jumpSpeed,trace("comboJump");
                }
        }
}
if (!keyPressed  ) {
        keyPressed=true,inAir=true,ySpeed=jumpSpeed,timer.start();
}

TOP

if (ySpeed<-5) {
                                ySpeed+=8;
                                if (ySpeed>0) {
                                ySpeed=0;
                                }
                                }

TOP

终于看懂了

TOP

提示: 作者被禁止或删除 内容自动屏蔽

TOP

哈哈,我已经放弃IF ELSE 这些破玩意了~
寻觅终生伴侣!

my blog

TOP

用&& ,这样有什么好处呢?

TOP

发新话题