Moin Moin
Ich habe ein Problem mit der Kollisionserkennung der Irrlicht Engine.
Die erste Kollision funktioniert und der Zombie wird entfernt.
Die zweite verursacht dann einen Fehler bei getCollisionPoint,´=/
könnt ihr helfen?
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
vector3df CGame::CheckBulletCollision()
{
line3d<float> m_TargetLine;
m_TargetLine.start = Camera->getAbsolutePosition();
m_TargetLine.end = (Camera->getTarget() - m_TargetLine.start).normalize() * 1000000.0f;
vector3df vCollisionPoint(0.0f, 0.0f, 0.0f);
triangle3df Tri;
const ISceneNode* CollisionWithNode = NULL;
const ISceneNode* CollisionWithNodeZombie = NULL;
g_pFramework->SMG->getSceneCollisionManager()->getCollisionPoint(m_TargetLine, m_MetaSelector, vCollisionPoint, Tri, CollisionWithNode);
if(CollisionWithNode == HouseNodeMiddle || CollisionWithNode == HouseNodeBottom)
std::cout<<"You shot the House!"<<std::endl;
//Testen, ob Zombie angeschossen wurde
std::list<CZombie*>::iterator ItZombie = m_ZombieList.begin();
int iCounter = 1;
g_pFramework->SMG->getSceneCollisionManager()->getCollisionPoint(m_TargetLine, m_MetaZombieSelector, vCollisionPoint, Tri, CollisionWithNodeZombie);
// HIER GIBTS BEIM ZWEITEN DURCHLAUFEN DER FUNKTION EINEN ZUGRIFFSFEHLER
while (ItZombie != m_ZombieList.end())
{
if(CollisionWithNodeZombie == (*ItZombie)->GetNode())
{
std::cout<<"You shot zombie "<<iCounter<<std::endl;
(*ItZombie)->Quit();
RegenerateZombieMetaSelector(*ItZombie);
ItZombie = m_ZombieList.erase(ItZombie);
}
else
{
ItZombie++;
}
iCounter++;
}
return vCollisionPoint;
}
|