我正在OOP中编写2D物理引擎。我想知道如何为空间中的物理对象创建一种“onTouchStart”或“onTouchEnd”事件系统?
是的,我知道有Box2D和其他产品,但是我想在内部做一些事情,因为游戏将执行非常基本的碰撞检查。另外,我认为这是学习新知识的一种方式。
无论如何,我有此代码...。
void phPhysics::step(float delta)
{
int objectCount = m_objects.size();
for (int i = 0; i < objectCount; ++i)
{
phPhysicsObject* obj = m_objects.at(i);
/* Update positon of the object. */
obj->update(delta);
if(!obj->isSleep())
checkForCollisions(obj);
}
}
void phPhysics::checkForCollisions(phPhysicsObject* object)
{
int objectCount = m_objects.size();
for (int i = 0; i < objectCount; ++i)
{
phPhysicsObject* obj = m_objects.at(i);
if(object == obj)
continue;
if(isColliding(object, obj))
obj->onTouchStart(object);
}
}
如您所见,我有onTouchStart事件,但这当然会在“onTouchStart”上连续触发。我如何让它仅在碰撞时触发“一次”,而在触碰结束时一次触发?我曾想过要做一系列相互接触的对象,但是我不知道这样是否行得通。
最佳答案
我认为效果很好。在phPhysicsObject
中,您可以有一个对象的array
(或者如果有一个,则为它们的id
,以节省内存),然后每次调用onTouchStart
时,您都可以检查对象是否已在其中,如果没有,则有一个新对象碰撞。如果是,则停止,因为已经为该对象调用了该函数。然后onTouchEnd
将对象从数组中删除。
关于c++ - 为物理引擎编写 'ON'事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36236990/