使用 sprites 和 setObject 在 C++ 上进行碰撞检测

问题描述 投票:0回答:1

我正在尝试创建一个非常基本的无尽跑步游戏玩家,但我陷入了碰撞检测。我正在使用 notepad++ 为 GBA 模拟器进行编程。下面的代码是我的主要游戏 while 循环。精灵是 4x4 的图块,每个图块是 8x8 像素。主循环下方是重力作用在精灵上的代码。 'setObject(0,...) 是角色精灵 setObject(1,...) 是平台精灵。感谢您提前提供任何帮助。

while (true)
{
    const uint8_t currentKeys = REG_KEYINPUT; 

    if (frame % 4 == 0) //change player sprite every 4 frame
    {

        if (run != 14)      //when last sprite is reached reset to original values
        {
            run = run + 2; //change run to next sprite
        }
        else
        {
            run = 0;            
            frame = 0;
            score ++; //adding one to score variable everytime loop is entered      
        }
    }

    SetObject(0,
        ATTR0_SHAPE(2) | ATTR0_8BPP | ATTR0_REG | ATTR0_Y(80),  //calling from spritesheet Stickmen 
        ATTR1_SIZE(2) | ATTR1_X(108),
        ATTR2_ID8(run));                                        //calling sprite 

    SetObject(1,
        ATTR0_SHAPE(2) | ATTR0_8BPP | ATTR0_REG | ATTR0_Y(112),
        ATTR1_SIZE(2) | ATTR1_X(108),
        ATTR2_ID8(100));

    if (currentKeys != prevKeys)  
    {
        if ((currentKeys & KEY_UP) == 0)
        {
            jumpY = -6.0f;
        }
    }

    frame += 1;
    prevKeys = currentKeys;
    //DrawScore();
    Physics();
    WaitVSync();
    UpdateObjects();
}
return 0;
}

void Physics()
{
    playerY = playerY + jumpY; // setting player to PlayersY + the jumpY value attained by user
    jumpY = jumpY + gravity; // because jump is negative, adding gravity cause it to fall down the screen
    SetObjectY(0, playerY);     
}
c++ sprite collision-detection game-boy-advance
1个回答
-3
投票

您似乎在使用精灵和

setObject
函数以 C++ 为 GBA 模拟器实现的基本无尽跑酷游戏中面临着碰撞检测的挑战。您的主游戏循环似乎处理精灵动画和用户输入,其中
setObject(0,...)
代表角色精灵,
setObject(1,...)
代表平台精灵。

为了解决冲突检测问题,您可以考虑实现逻辑来检查角色和平台精灵之间的冲突。这可能涉及比较他们在游戏世界中的位置,并在检测到碰撞时做出相应的响应,可能是通过调整玩家的位置或触发动作。

您的

Physics()
函数似乎可以处理重力和玩家移动,但对于碰撞检测,您可能需要引入额外的代码来检查角色精灵是否与平台精灵重叠。这可能涉及比较两个精灵的 X 和 Y 坐标,并在发生碰撞时采取适当的操作。我对另一个客户的网站(也是 GBA 模拟器网站)做了同样的事情,问题得到了解决,这是他的网站链接:https://apkmyboy.com

© www.soinside.com 2019 - 2024. All rights reserved.