CS3作的走,跑,跳,打,(as3初学者)

本文介绍了一款游戏主角的动画切换与行为控制实现细节,包括行走、奔跑、跳跃及攻击等状态的处理逻辑,通过键盘输入触发不同动作并配合动画效果,确保游戏角色的行为流畅自然。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//参数
var 落下速度:Number=0;
var 重力加速度:Number=1;
var 主角跳动速度:Number=-15;
var 主角走动速度:Number=4;
var 主角跑动速度:Number=8;
//主角状态
var 主角:MovieClip=小子;
var 主角左:Number=-主角.scaleX;
var 主角右:Number=主角.scaleX;
var 动画:Boolean;
var 空中:Boolean=true;
var 被攻击:Boolean;
var 攻击方式:String;
var 攻击力量:Number=0;
var 走:Boolean;
var 跑:Boolean;
var 攻击:Boolean;
var 跳:Boolean;
//
var 动作:Object=new Object;
动作.走=false;
//按键状态
var 键盘:Object=new Object;
//方向键:上W(87),下S(83),左A(65),右D(68)
//动作键:攻击拳J(74),跳K(75)
键盘.上=87;//38
键盘.下=83;//40
键盘.左=65;//37
键盘.右=68;//39
键盘.攻击=74;//16
键盘.跳=75;//17
键盘.按_上=false;
键盘.按_下=false;
键盘.按_左=false;
键盘.按_右=false;
键盘.按_攻击=false;
键盘.按_跳=false;
//
//--------------------------------计数刷新器-----------------------------------------
var 计数刷新器:Timer=new Timer(100,0);
var 数字:Number=100;
计数刷新器.start();
计数刷新器.addEventListener(TimerEvent.TIMER,计数刷新开始);
function 计数刷新开始(e:TimerEvent):void {
        数字++;
}
//
//--------------------------------人物初始化------------------------------------------
//
var 人物初始化:Function=function() {
攻击方式=null;
动画=false;
主角.gotoAndStop("站");
if((键盘.按_左 || 键盘.按_右) && 走){
主角.gotoAndStop("走");
}
if((键盘.按_左 || 键盘.按_右) && 跑) {
主角.gotoAndStop("跑");
}
};
//
//---------------------------------按键监听-----------------------------------------
//
stage.addEventListener(KeyboardEvent.KEY_DOWN,按下);
function 按下(e:KeyboardEvent):void {
        if (e.keyCode==键盘.上 && !键盘.按_上) {
                键盘.按_上=true;
        }
        if (e.keyCode==键盘.下 && !键盘.按_下) {
                键盘.按_下=true;
        }
        if (e.keyCode==键盘.左 && !键盘.按_左) {
                键盘.按_左=true;
                if (数字<3) {
                        走=false;
                        跑=true;
                } else {
                        数字=0;
                        走=true;
                        跑=false;
                }
        }
        if (e.keyCode==键盘.右 && !键盘.按_右) {
                键盘.按_右=true;
                if (数字<3) {
                        走=false;
                        跑=true;
                } else {
                        数字=0;
                        走=true;
                        跑=false;
                }
        }
        if (e.keyCode==键盘.攻击 && !键盘.按_攻击) {
                键盘.按_攻击=true;
        }
        if (e.keyCode==键盘.跳 && !键盘.按_跳) {
                键盘.按_跳=true;
        }
}
stage.addEventListener(KeyboardEvent.KEY_UP,松开);
function 松开(e:KeyboardEvent):void {
        if (e.keyCode==键盘.上 && 键盘.按_上) {
                键盘.按_上=false;
        }
        if (e.keyCode==键盘.下 && 键盘.按_下) {
                键盘.按_下=false;
        }
        if (e.keyCode==键盘.左 && 键盘.按_左) {
                键盘.按_左=false;
        }
        if (e.keyCode==键盘.右 && 键盘.按_右) {
                键盘.按_右=false;
        }
        if (e.keyCode==键盘.攻击 && 键盘.按_攻击) {
                键盘.按_攻击=false;
        }
        if (e.keyCode==键盘.跳 && 键盘.按_跳) {
                键盘.按_跳=false;
        }
}
//
//------------------------------人物监听--------------------------------------------
//
stage.addEventListener(Event.ENTER_FRAME,人物监听);
function 人物监听(e:Event):void {
        //按左右下方向键
        if (键盘.按_左 && 键盘.按_右) {
                if (跑) {
                        跑=false;
                }
                //
        } else {
                if (键盘.按_左) {//按左键
                        if (!被攻击) {
                                if (走) {
                                        if (!动画 && !空中 && 攻击方式==null && !动作.走) {
                                                动作.走=true;
                                                主角.gotoAndStop("走");
                                        }
                                        if (空中 || 攻击方式==null) {
                                                主角.x-=主角走动速度;
                                        }
                                }
                                if (跑) {
                                        if (!动画 && !空中 && 攻击方式==null && !动作.跑) {
                                                动作.跑=true;
                                                主角.gotoAndStop("跑");
                                        }
                                        if (空中 || 攻击方式==null) {
                                                主角.x-=主角跑动速度;
                                        }
                                }
                                if (攻击方式==null) {
                                        主角.scaleX=主角左;
                                }
                        }
                } else if (键盘.按_右) {//按右键
                        if (!被攻击) {
                                if (走) {
                                        if (!动画 && !空中 && 攻击方式==null && !动作.走) {
                                                动作.走=true;
                                                主角.gotoAndStop("走");
                                        }
                                        if (空中 || 攻击方式==null) {
                                                主角.x+=主角走动速度;
                                        }
                                }
                                if (跑) {
                                        if (!动画 && !空中 && 攻击方式==null && !动作.跑) {
                                                动作.跑=true;
                                                主角.gotoAndStop("跑");
                                        }
                                        if (空中 || 攻击方式==null) {
                                                主角.x+=主角跑动速度;
                                        }
                                }
                                if (攻击方式==null) {
                                        主角.scaleX=主角右;
                                }
                        }
                } else {
                        if (!被攻击) {
                                if (!动画 && !空中 && 攻击方式==null) {
                                        走=false;
                                        跑=false;
                                        动作.走=false;
                                        动作.跑=false;
                                        主角.gotoAndStop("站");
                                }
                        }
                }
        }
        //按下攻击键
        if (键盘.按_攻击 && !攻击 ) {
                攻击=true;
                if (!被攻击 && 攻击方式==null) {
                        //普通攻击
                        攻击方式="攻击";
                        攻击力量=7;
                        //
                        主角.gotoAndStop(攻击方式);
                }
        } else if (!键盘.按_攻击 && 攻击) {
                攻击=false;
        }
        //按下跳键
        if (键盘.按_跳 && !跳) {
                跳=true;
                if (!空中 && !被攻击) {
                        空中=true;
                        落下速度=主角跳动速度;
                        if (攻击方式==null) {
                                主角.gotoAndStop("跳上");
                                提取声音("跳上声");
                        }
                }
        } else if (!键盘.按_跳 && 跳) {
                跳=false;
                if (落下速度<-5) {
                        落下速度+=8;
                        if (落下速度>0) {
                                落下速度=0;
                        }
                }
        }
        //
        //如果目前在空中的话
        if (空中) {
                落下速度+=重力加速度;
                主角.y+=落下速度;
                if (落下速度>0) {
                        if (主角.判断人物.hitTestObject(判断路地)) {
                                空中=false;
                                主角.y=判断路地.y;
                        }
                }
        }
        if (空中 && 落下速度>=0) {
                if (攻击方式==null) {
                        主角.gotoAndStop("跳下");
                }
        }
        //
        //
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值