gpt4 book ai didi

ios - Sprite Kit 中同时发生两次或多次碰撞

转载 作者:行者123 更新时间:2023-11-28 20:07:13 25 4
gpt4 key购买 nike

我有一个小问题,我自己不知道解决方案。我正在处理与 Sprite Kit 的碰撞,当我的英雄同时与两个物体碰撞时(例如地面和空中的立方体),我遇到了问题。

我得到的 bool 值会告诉英雄何时跳跃,何时以极快的速度奔跑,何时缓慢奔跑(例如,当他撞到一堵由立方体制成的墙时)。

在最后一个例子中,我的 bool 值变得疯狂,有时我的英雄只是越过立方体,因为速度没有减慢。有时 bool 值“正在跳跃”也会激活,所以在简历中它会变得疯狂,我认为这是因为处理碰撞方法 (didBeginContact) 只允许两个接触体,contact.bodyA 和 contact.bodyB。

我想知道我是否可以编辑一个文件来添加一个 contact.bodyC 以及我需要编辑什么文件?如果是,我会处理这个问题,我认为通过三个联络机构,我将能够对所有可能的情况进行编程。如果不是,那么我想我将不得不移除那些立方体墙或更改它们的类别位掩码...

最佳答案

也许您需要对联系人进行排队,然后在 -update 中进行处理。例如:

声明一个名为 NSMutableArray *_contactQueue 的实例变量;将联系人添加到数组中:

-(void) didBeginContact:(SKPhysicsContact *)contact
{
[_contactQueue addObject:contact];
}

创建一个方法来处理与游戏时间同步的每个联系人:

-(void)processContactsForUpdate:(NSTimeInterval)currentTime
{
for (SKPhysicsContact * contact in [_contactQueue copy]) {
[self handleContact:contact];
[_contactQueue removeObject:contact];
}
}

从更新中调用此方法:

[self processContactsForUpdate:currentTime];

然后实现处理联系人的处理方法。

-(void) handleContact:(SKPhysicsContact *)contact
{
// What you are doing in your current didBeginContact method
}

你只能处理两个物体的接触,但这样它就与每一帧同步了。我在 this tutorial 的 SpriteKit 教程中了解了这一点。

关于ios - Sprite Kit 中同时发生两次或多次碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com