【问题标题】:AS3 line of sight without using hittest object.AS3 视线不使用 hittest 对象。
【发布时间】:2011-10-01 17:30:11
【问题描述】:

我正在开发一个游戏项目,并且正在研究游戏的 AI 方面。我希望敌方物体在看到敌人时开始瞄准并向玩家射击,我在这篇文章中遇到了这样做的方法: http://www.emanueleferonato.com/2007/04/29/create-a-flash-game-like-security-part-2/

我的问题是你能在不使用实际线路的情况下做同样的事情吗?例如,您可以使用命中测试点并基本上定义一条线吗?或其他一些不实际将物体放在舞台上的方式。

我正在努力使事情尽可能高效,如果可能的话,我不想使用这种方法。如果您有一些建议、代码或有用资源的链接,我将不胜感激!

【问题讨论】:

    标签: actionscript-3 algorithm artificial-intelligence hittest


    【解决方案1】:

    只使用计算,而不是行

    这是重要的代码

    dist_x = _root.hero._x-_x;
    dist_y = _root.hero._y-_y;
    dist = Math.sqrt(dist_x*dist_x+dist_y*dist_y);
    angle = Math.atan(dist_y/dist_x)/(Math.PI/180);
    if (dist_x<0) {
        angle += 180;
    }
    if (dist_x>=0 && dist_y<0) {
        angle += 360;
    }
    wall_collision = 0;
    for (x=1; x<=dist; x++) {
        point_x = _x+x*Math.cos(angle*Math.PI/180);
        point_y = _y+x*Math.sin(angle*Math.PI/180);
        if (_root.wall.hitTest(point_x, point_y, true)) {
            wall_collision = 100;
            break;
        }
    }
    

    如果wall_collision = 100,则玩家在警察的视线范围内。不过,我只是为此使用布尔值。

    【讨论】:

    • 太棒了,谢谢!这很有帮助。 :) 我不得不同意你的布尔值。我不知道为什么会这样写。
    • 他使用它作为线的 alpha 值,这就是原因。顺便说一句,你知道这是用 AS2 写的吗?
    • 哦,原来如此。 :) 是的,我知道属性前面的所有下划线都是 AS2。我正在用 as3 编写我的游戏。 hitest 方法是否适用于此目的?我知道新的 hittest 只测试与边界框。
    • 哦,我只是仔细查看了代码,这实际上是解决此问题的一种非常有趣的方法。谢谢你。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多