【问题标题】:Libgdx enemy movingLibgdx 敌人移动
【发布时间】:2014-01-19 21:14:31
【问题描述】:

我对在我的游戏中移动敌人(如马里奥兄弟游戏中的乌龟)有疑问。

我正在开发平台游戏,例如 libgdx 中的马里奥兄弟游戏。我制作地面,玩家在地面上移动,游戏装饰等......但我不知道如何让敌人移动。

敌人什么时候开始移动(渲染)?在某些时间延迟或玩家靠近敌人(1-2 屏幕宽度)时,一直...

【问题讨论】:

    标签: android artificial-intelligence libgdx


    【解决方案1】:

    假设你有这样的图像:

    当你移动你的角色时,可见区域会随之移动,因此你的角色总是在中间。

    当角色移动时,charX 增加,当他移动一定距离后,他会到达敌人激活时的位置:

    它会一直保持活跃,直到角色到达这里:

    实现可能是这样的:
    someOffset 可以是任意常量值,您可以使用它来让敌人在进入屏幕并变得可见之前激活。

    所以,对于每一帧你都可以这样做:

    if (Math.abs(enemyX - charX) <= visibleWidth / 2 + someOffset) {
        // the enemy patrols between leftLimit and rightLimit
        if (enemySpeed < 0 && enemyX < leftLimit) {
            enemyX = leftLimit;
            enemySpeed = -enemySpeed;
        } else if (enemySpeed > 0 && enemyX > rightLimit) {
            enemyX = rightLimit;
            enemySpeed = -enemySpeed;
        }
    
        enemyX += enemySpeed * delta;
    
        renderEnemy();
    }
    

    [更新]

    如果我没记错的话,马里奥的屏幕只能向右移动。如果马里奥向左移动,屏幕将保持原位,并且只允许马里奥到达其左侧边缘,不能再进一步。

    由于他并不总是在可见区域的同一位置,因此基于可见区域位置而不是角色位置来激活/渲染敌人可能会更好。

    假设visibleX 是可见区域(绿色矩形)左边缘的 x 位置。

    在每次更新时,您都可以执行以下操作:

    visibleX = Math.max(charX - visibleWidth / 2, visibleX);
    
    if (enemyX <= visibleX + visibleWidth + someOffset && enemyX >= visibleX - someOffset) {
        // ...
    }
    

    【讨论】:

    • 我知道我不应该发布那个,但你的答案结构很好,编辑很好,形象很好!干得好@mrzli !!!
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多