首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动作脚本3.0 HitTestObject不工作吗?

动作脚本3.0 HitTestObject不工作吗?
EN

Stack Overflow用户
提问于 2015-02-03 06:18:20
回答 2查看 214关注 0票数 0

帮我..。我正在为我的学校项目制作rpg,NPC01类中的代码NPC01不起作用。

这是我的密码:

Game.as

代码语言:javascript
复制
package {
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Game extends MovieClip{
       var map:Map = new Map();
       var player:Player = new Player();
       var npc:NPC = new NPC();

       public function Game(){
         addChild(map);
         addChild(npc);
         addChild(player);
         this.addEventListener(Event.ENTER_FRAME,loop);
       }
       private function loop():void {
         npc.x = map.x;
         npc.y = map.y;
       }
     }
   }

NPC.as

代码语言:javascript
复制
    package  {
      import flash.display.MovieClip;
      import flash.events.Event;

      public class NPC extends MovieClip {

        var npc01:NPC01 = new NPC01();

        public function NPC() {
            // constructor code

            addChild(npc01);            

            npc01.x = 20;
            npc01.y = 0;
        }
    }
}

NPC01.as

代码语言:javascript
复制
package  {
    import flash.display.MovieClip;
    import flash.events.Event;

    public class NPC01 extends MovieClip {      

        var player:Player = new  Player();

        public function NPC01() {
            // constructor code
            this.addEventListener(Event.ENTER_FRAME, loop);
        }
        private function loop(e:Event):void
        {
            if(player.hitTestObject(npc)) {  //npc is a movieclip  inside NPC01
              trace("HIT!!");   
              }
        }

我没有错误信息。只是,每当玩家的电影点击npc电影,输出就不会出现..。

我还试图通过以下方式跟踪他们的位置:

代码语言:javascript
复制
trace( player.getBounds(stage) );
trace( npc.getBounds(stage) );

结果:

代码语言:javascript
复制
(x=343, y=218, w=26, h=45)
(x=334, y=218, w=32, h=51)

他们好像在碰撞。

但是当我在函数循环下的hitTestObject中编写Game.as代码时,跟踪输出会在播放器点击npc时显示出来。

我不介意把角色扮演者的角色移来移去。

对不起我的英语不好。

我还在loop 01中尝试了下面的循环函数:

代码语言:javascript
复制
if (npc.hitTestObject(player)) {
  trace("Hit01");
}
if (npc.hitTestObject(player)) {
    trace("Hit02");
}
if (npc.hitTestPoint(player.x, player.y, true)) {
    trace("Hit03");
}
if (player.hitTestPoint(npc.x, npc.y, true)) {
    trace("Hit04");
} 

但只有"Hit03“回应。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-03 09:37:10

问题是,当您只需要one时,您正在创建两个不同的 Player对象。

这样做对您的目的应该更好:

代码语言:javascript
复制
package {
import flash.display.MovieClip;
import flash.events.Event;

public class Game extends MovieClip{
   var map:Map = new Map();
   var player:Player = new Player();
   var npc:NPC = new NPC(player);

   public function Game(){
     addChild(map);
     addChild(npc);
     addChild(player);
     this.addEventListener(Event.ENTER_FRAME,loop);
   }
   private function loop():void {
     npc.x = map.x;
     npc.y = map.y;
   }
 }

}

代码语言:javascript
复制
package  {
  import flash.display.MovieClip;
  import flash.events.Event;

  public class NPC extends MovieClip {

    var player:Player;
    var npc01:NPC01;

    public function NPC(player:Player) {
        // constructor code
        this.player = player;
        npc01 = new NPC01(player);
        addChild(npc01);            

        npc01.x = 20;
        npc01.y = 0;
    }
}

}

代码语言:javascript
复制
package  {
import flash.display.MovieClip;
import flash.events.Event;

public class NPC01 extends MovieClip {      

    var player:Player;

    public function NPC01(player:Player) {
        // constructor code
        this.player = player;
        this.addEventListener(Event.ENTER_FRAME, loop);
    }
    private function loop(e:Event):void
    {
        if(player.hitTestObject(npc)) {  //npc is a movieclip  inside NPC01
          trace("HIT!!");   
          }
    }
票数 1
EN

Stack Overflow用户

发布于 2015-02-03 06:55:37

下面是您拥有的DisplayObjects:

  • (游戏):游戏
    • 地图:地图

    • 玩家:玩家

    • npc:NPC

      • npc01:NPC01 01

        • 玩家:玩家

        • npc:电影

注意,您已经创建了两个播放器(一个在游戏中,一个在NPC01中)。你确定你的测试是对的吗?

我猜你可能只想要一个。尝尝这个。

代码语言:javascript
复制
package {
import flash.display.MovieClip;
import flash.events.Event;

public class Game extends MovieClip{
    var map:Map = new Map();
    var player:Player = new Player();
    var npc:NPC = new NPC();

public function Game(){
    addChild(map);
    addChild(npc);
    addChild(player);
    this.addEventListener(Event.ENTER_FRAME,loop);
}
private function loop():void {
    npc.x = map.x;
    npc.y = map.y;

    if(player.hitTestObject(npc)) {
        trace("HIT!!");   
    }
}

}

并将播放机从NPC01中删除:

代码语言:javascript
复制
package {
import flash.display.MovieClip;
import flash.events.Event;

public class NPC01 extends MovieClip {    
    public function NPC01() {
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28292573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档