判断动画状态机当前播放的动画。

 
   Animator  thisAni;//自身的动画控制器
    private void Awake()
    {
        //获取自身的动画控制器
        thisAni = this.GetComponent<Animator>();
    }


    float speed = 0;
    public int tempNumber = 0;
    private void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            speed += Time.deltaTime * 0.1f;
           
            thisAni.SetFloat("speed", speed);
            speed = Mathf.Clamp01(speed);
        }


        设置索引图层的权重
        //thisAni.SetLayerWeight(2, 1);


        //AnimatorStateInfo 动画层状态信息类
        //GetCurrentAnimatorStateInfo 获取动画控制器中指定层的状态信息
        AnimatorStateInfo info = thisAni.GetCurrentAnimatorStateInfo(0);
        //获取当前动画状态的哈希值
        tempNumber = info.shortNameHash;
        
        //这句代码只是将字符串转换成哈希值 其他没什么卵用
        print(Animator.StringToHash("Blend Tree"));


        //判断当前状态是否为跑
        print("当前状态:" + Animator.StringToHash("Run").Equals(tempNumber));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
private var backSound:Sound = new Back_Sound ; //实例化声音开关对象 private var sound_MC:Sound_MC=new Sound_MC(); //创建一个标识变量,该变量用于标记背景音乐是否播放,初始状态为播放 private var soundON:Boolean = true; //创建一个Soundchannel对象 private var channel:SoundChannel; //创建一个影片剪辑对象,该对象作为容器用于放置游戏中循环运动的背景 var Map:MovieClip = new MovieClip(); //实例化游戏结束信息影片剪辑 var gameover_MC:game_Over=new game_Over();; //实例化返回按钮 var Back_Btn:back_btn=new back_btn() public function Game():void { //定义舞台的帧频 stage.frameRate = 35; //使舞台可以最大化 stage.scaleMode = StageScaleMode.EXACT_FIT; //侦听开始游戏按钮的单击事件,调用playGame()函数开始游戏 Play_Btn.addEventListener(MouseEvent.CLICK,playGame); //侦听游戏介绍按钮的单击事件,调用GameIntro()函数弹出游戏介绍界面; Help_Btn.addEventListener(MouseEvent.CLICK,GameIntro); //播放背景音乐,使背景音乐循环播放 channel = backSound.play(0,100000); } //创建【帮助】按钮鼠标单击事件响应函数 private function GameIntro(e:MouseEvent){ //使开始界面影片剪辑跳转到第二帧显示帮助信息内容 Start_MC.gotoAndStop(2); //使舞台上的【开始】按钮和【帮助】按钮不可见 Play_Btn.visible=false; Help_Btn.visible=false; //为影片剪辑中的【back】按钮添加鼠标单击事件侦听器 Start_MC.Back_Btn.addEventListener(MouseEvent.CLICK ,toStart) ; } //创建【back】按钮鼠标单击事件响应函数 private function toStart(e:MouseEvent ){ //移除【back】按钮的事件侦听器 Start_MC.Back_Btn.removeEventListener(MouseEvent.CLICK ,toStart); //使舞台上的【开始】按钮和【帮助】按钮可见 Play_Btn.visible=true; Help_Btn.visible=true; //开始界面影片剪辑跳回到第一帧 Start_MC.gotoAndStop(1); } private function playGame(event:MouseEvent):void { //隐藏开场界面 hideStartScene(); //调用函数加载背景图并使其循环滚动 loadMap(); //调用函数加载记分器 loadScore(); //loadTime(); //加载计时器 //调用函数加载主角 loadRole(); //调用函数加载敌人 loadEnemy(); //调用函数放置显示生命值的影片剪辑 loadLife(); //调用函数使背景音乐控制按钮显示 loadSoundMC(); } //创建函数移除开始界面中的各个元素 private function hideStartScene():void { //移除开始界面影片剪辑 removeChild(Start_MC); //隐藏【开始】按钮和【帮助】按钮 removeChild(Play_Btn); removeChild(Help_Btn); } //在舞台上放置游戏背景 private function loadMap():void { //实例化天空背景对象 var backG:bg=new bg(); //实例化地面对象 var Land:land = new land(); //设置地面的位置 Land.y = stage.stageHeight - Land.height / 2; //使天空背景显示 Map.addChild(backG); //实例化第一个游戏背景图 var Map_1:map_1 = new map_1(); //将第一个游戏背景图添加到容器中 Map.addChild(Map_1); //为第一个游戏背景图影片剪辑添加帧频事件侦听器 Map_1.addEventListener(Event.ENTER_FRAME,moveMap); //实例化第二个游戏背景图 var Map_2:map_2= new map_2(); //设置第二个背景图的初始位置 Map_2.x = Map_1.width; //将第二个游戏背景图添加到容器中 Map.addChild(Map_2); //将地面图添加到容器中 Map.addChild(Land); //为第二个游戏背景图添加帧频事件侦听器 Map_2.addEventListener(Event.ENTER_FRAME,moveMap); //使容器显示于舞台的底层 stage.addChildAt(Map,0); } //使背景循环移动 private function moveMap(event:Event):void { var mc:MovieClip = event.target as MovieClip; //使背景图向左移动 mc.x -= 2; //判断背景图是否离开舞台 if (mc.x<=-(mc.width)) { //重新定义背景图的位置,使其与上一张图斜接。这里要注意,衔接位置应该在舞台外,否则会出现明显的停顿现象 mc.x=stage.stageWidth+30 ; } } //在舞台上放置记分器 private function loadScore():void { //初始化分数值变量 Score=0 //实例化记分器对象 Score_MC = new score(); //设置记分器对象的位置 Score_MC.x = 100; Score_MC.y = stage.stageHeight - 25; //将记分器放置到舞台 stage.addChild(Score_MC); //设置记分器显示的初始值 Score_MC.Score_Text.text = "0"; } //在舞台上放置生命值影片剪辑 private function loadLife():void { //对象实例化 Life_MC= new life(); //设置记分器对象的位置 Life_MC.x = 250; Life_MC.y = stage.stageHeight - 25; //将记分器放置到舞台 stage.addChild( Life_MC); } //在舞台上放置声音控制按钮 private function loadSoundMC():void { //设置对象在舞台上的放置位置 sound_MC.x = 520; sound_MC.y = stage.stageHeight - 25; //使对象处于按钮模式 sound_MC.buttonMode = true; //将对象放置到舞台 stage.addChild(sound_MC); //为对象添加鼠标单击事件侦听器 sound_MC.addEventListener(MouseEvent.CLICK ,controlSound); } //加载敌人 private function loadEnemy():void { //指定敌人出现的时间间隔 var delay:uint = 3000; //无限次循环 var repeat:uint = 0; //创建时间对象 enemyTimer = new Timer(delay,repeat); //并添加事件侦听器侦听时间对象的时间事件使敌人显示 enemyTimer.addEventListener(TimerEvent.TIMER,showEnemy); //启动计时器; enemyTimer.start(); } //使敌人以一定的时间间隔随机出现 private function showEnemy(e:TimerEvent):void { //随机生成数字1或2 var i:int = Math.round(Math.random() * 1 + 1); //如果生成的是1 if (i==1) { //实例化第一个敌人对象 Enemy = new enemy_1(); } else { //实例化第二个敌人对象 Enemy = new enemy_2(); } //设置敌人在舞台上的位置 Enemy.x = 630; Enemy.y = Math.round(Math.random()*(stage.stageHeight)-100); //如果垂直方向位置过高,使其位于指定的位置 if (Enemy.y < 10) { Enemy.y = 30; } //为敌人对象添加帧频事件侦听器使其能够运动 Enemy.addEventListener(Event.ENTER_FRAME,enemyLeft); //将敌人置于容器中 Enemys.addChild(Enemy); //将容器置于舞台上; stage.addChildAt(Enemys,1); } //创建帧频事件响应函数使敌人左移 private function enemyLeft(m:Event):void { //实例化事件目标对象 var mc:MovieClip = m.target as MovieClip; //使对象左移 mc.x -= 5; //如果对象移出舞台 if (mc.x <= -50) { //移除事件侦听器 mc.removeEventListener(Event.ENTER_FRAME,enemyLeft); //如果容器中有对象 if(Enemys.contains(mc) ) {//将对象从容器中移除 Enemys.removeChild(mc); } } } //加载游戏主角 private function loadRole():void { //变量初始化 bool=true; //实例化主角 Role = new role(); //设置主角位置 Role.x = 150; Role.y = 200; //使影片剪辑从第一帧开始播放 Role.gotoAndPlay(1); //将主角放置到舞台上 stage.addChildAt(Role,1); //创建一个新对象 key = new Object(); //为舞台添加键盘按下键事件侦听器 stage.addEventListener(KeyboardEvent.KEY_DOWN,onkeyDown); //为舞台添加键盘按键释放事件侦听器 stage.addEventListener(KeyboardEvent.KEY_UP,onkeyUp); //为舞台添加帧频事件侦听器 stage.addEventListener(Event.ENTER_FRAME,roleMove); } //键盘键按下事件响应函数 private function onkeyDown(event:KeyboardEvent):void { //设置被按下的键为真 key[event.keyCode] = true; } //键盘按键释放事件响应函数 private function onkeyUp(event:KeyboardEvent):void { //删除key对象 delete key[event.keyCode]; //设置变量值 bool = true; //主角恢复到水平飞行状态 Role.gotoAndStop(13); } //舞台帧频事件响应函数 private function roleMove(event:Event):void { //如果按下的是左箭头键 if (key[Key_LEFT]) {//如果主角没有从左侧飞出舞台 if (Role.x > 20) { //主角向左移动 Role.x -= speed; } } //如果按下的是上箭头键 if (key[Key_UP]) { //如果主角没有从上方飞出舞台 if (Role.y > 20) { //主角向上移动 Role.y -= speed; //播放主角飞行动画 Role.gotoAndPlay(14); } } //如果按下右箭头键 if (key[Key_RIGHT]) { //如果主角没有从右侧飞出舞台 if (Role.x < stage.stageWidth) { //主角向右移动 Role.x += speed; } } //如果按下下箭头键 if (key[Key_DOWN]) {//如果主角位于指定范围内 if (Role.y < stage.stageHeight - 80) { //主角下移 Role.y += speed; //播放飞行动画 Role.gotoAndPlay(2); } } //如果按下空格键 if (key[Key_Space]) { //如果变量值为true if (bool==true) { //实例化炮弹对象 Bullet = new bullet(); //定义炮弹的位置,使其与主角相同 Bullet.x = Role.x; Bullet.y = Role.y; //播放射击声 bulletSound.play(); //为炮弹对象添加帧频事件侦听器; Bullet.addEventListener(Event.ENTER_FRAME,bulletMove); //将炮弹对象置于炮弹容器中 Bullets.addChild(Bullet); //将炮弹容器置于舞台上 stage.addChildAt(Bullets,1); //设置变量值 bool = false; } } //如果有敌人 if (Enemy) { //遍历所有的敌人 for (var i:int=0; i<Enemys.numChildren; i++) { //如果主角和某个敌人发生碰撞 if (Role.hitTestObject(Enemys.getChildAt(i))) { //实例化事件目标对象,即敌人对象 var ene:MovieClip = Enemys.getChildAt(i) as MovieClip; //播放对象爆炸动画 ene.play(); //播放主角的爆炸动画 Role.gotoAndPlay(24); //播放爆炸声音 exSound.play(); } } } //如果生命值小于7 if (Role.myScore < 7) { //跳转到对应的帧显示对应个数的生命标志 Life_MC.gotoAndPlay(Role.myScore); } //如果生命值正好是6 if (Role.myScore == 6) { //在舞台添加游戏结束信息影片剪辑 stage.addChild(gameover_MC); //跳转到影片剪辑的第二帧显示游戏失败信息 gameover_MC.gotoAndStop(2) //显示当前积分 gameover_MC.result_txt.text = Score.toString(); //调用函数移除游戏元素和相关事件侦听器 gameover(); } } //炮弹实例帧频事件响应函数,该函数使炮弹右移 private function bulletMove(event:Event):void { //实例化事件目标对象,即炮弹对象 var mc:MovieClip = event.target as MovieClip; //炮弹右移 mc.x += 15; //如果炮弹飞离舞台 if (mc.x >= stage.stageWidth) { //移除事件侦听器使其不再右移 mc.removeEventListener(Event.ENTER_FRAME,bulletMove); //如果容器中有对象 if(Bullets.contains(mc) ) { //将对象从容器中移除 Bullets.removeChild(mc); } } //如果敌人出现 if (Enemy) { //获取敌人个数 var num:int = Enemys.numChildren; //遍历所有敌人 for (var i:int = 0; i<num; i++) { //如果被炮弹击中 if (mc.hitTestObject(Enemys.getChildAt(i))) { //移除炮弹事件侦听器使该炮弹停止移动 mc.removeEventListener(Event.ENTER_FRAME,bulletMove); //如果容器中包含对象 if( Bullets.contains(mc) ) { //将对象删除 Bullets.removeChild (mc); } //得分加10 Score += 10; //将被击中的敌人实例化 var ene:MovieClip = Enemys.getChildAt(i) as MovieClip; //播放爆炸动画 ene.play(); //播放爆炸声音 exSound.play(); //在文本框中显示当前分值 Score_MC.Score_Text.text = Score.toString(); } } } //如果得分超过指定值 if (Score>100) { //向舞台添加游戏结束信息影片剪辑 stage.addChild(gameover_MC); //跳转到指定的帧显示胜利信息 gameover_MC.gotoAndStop(1); //显示玩家得分 gameover_MC.result_txt.text = Score.toString(); //调用函数移除游戏元素和相关事件侦听器 gameover(); } } //控制背景声音的播放 private function controlSound(s:MouseEvent ) { //如果背景声音正在播放 if (soundON==true) { //变量值设置为false soundON = false; //声音控制影片剪辑跳到第二帧显示静音标志 sound_MC.gotoAndStop(2); //停止声音播放; channel.stop(); } else { //如果背景声音没有播放,变量值设置为true soundON = true; //声音控制影片剪辑跳到第一帧取消静音标志的显示 sound_MC.gotoAndPlay(1); //背景声音开始循环播放; backSound.play(0,1000000); } } //移除游戏各个元素和事件侦听器 private function gameover():void { //指定【back】按钮的位置 Back_Btn.x=500; Back_Btn.y=300; //在舞台上放置【back】按钮 stage.addChild (Back_Btn); //为按钮添加鼠标单击事件侦听器 Back_Btn.addEventListener(MouseEvent.CLICK ,goBack); //移除游戏中各个对象的事件侦听器 stage.removeEventListener(KeyboardEvent.KEY_DOWN,onkeyDown); stage.removeEventListener(KeyboardEvent.KEY_UP,onkeyUp); stage.removeEventListener(Event.ENTER_FRAME,roleMove); sound_MC.removeEventListener(MouseEvent.CLICK ,controlSound); Enemy.removeEventListener(Event.ENTER_FRAME,enemyLeft); //当敌人容器中的子对象不为0 while(Enemys.numChildren!=0){ //将容器最底层的对象删除 Enemys.removeChildAt(0); } //从舞台上移除游戏对象 stage.removeChild (Map); stage.removeChild(Enemys); stage.removeChild(Role); stage.removeChild (Score_MC); stage.removeChild (Life_MC); stage.removeChild (sound_MC); } //创建【back】按钮的鼠标单击事件响应函数 private function goBack(e:MouseEvent ){ //从舞台上移除结束信息影片剪辑 stage.removeChild(gameover_MC); //移除【back】按钮的事件侦听器 Back_Btn.removeEventListener(MouseEvent.CLICK ,goBack); //移除舞台上的【back】按钮 stage.removeChild (Back_Btn); //调用函数加载对象重新开始游戏 loadMap(); loadScore(); loadRole(); loadEnemy(); loadLife(); loadSoundMC(); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值