Hi,
Irgendwie bekomme ich es einfach nicht hin herauszufinden ob sich zwei Sprites berühren oder nicht -.- Sollte ja eigentlich nicht so schwer sein...?
Ich hab jetzt nen Haufen unterschiedlicher Ansätze gehabt, das hier ist mein letzter:
|
C-/C++-Quelltext
|
1
2
|
( PositionSprite.y+Sprite.GetSize().y>=PositionFood.y && PositionSprite.y<=PositionFood.x+Food.GetSize().y ) &&
( PositionSprite.x+Sprite.GetSize().x>=PositionFood.x && PositionSprite.x<=PositionFood.x+Food.GetSize().x )
|
Warum klappt es nicht? Also teilweise klappt es, aber nicht annähernd zufriedenstellend und ich hab echt kein Bock mehr auf rumtesten -.-
Edit: hmm wahrscheinlich wäre es hilfreicher den ganzen Code zu posten. Btw habe ich keine Regeln beim Fehlverhalten feststellen können, nur dass es beim ersten mal immer klappt.
|
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
while(App.GetEvent(Event)){
if (Event.Type==sf::Event::Closed)
App.Close();
if ((Event.Type==sf::Event::KeyPressed)&&(Event.Key.Code==sf::Key::Escape))
App.Close();
if((Event.Type==sf::Event::KeyPressed)&&(Event.Key.Code==sf::Key::Left)){
x=-1;
y=0;
}
if((Event.Type==sf::Event::KeyPressed)&&(Event.Key.Code==sf::Key::Right)){
x=1;
y=0;
}
if((Event.Type==sf::Event::KeyPressed)&&(Event.Key.Code==sf::Key::Up)){
y=-1;
x=0;
}
if((Event.Type==sf::Event::KeyPressed)&&(Event.Key.Code==sf::Key::Down)){
y=1;
x=0;
}
if ((Event.Type==sf::Event::MouseButtonPressed)&& (Event.MouseButton.Button==sf::Mouse::Left)){
if(ctr==0) Clock.Reset();
ctr++;
}
if((Event.Type==sf::Event::KeyPressed)&&(Event.Key.Code==sf::Key::F1)){
sf::Image Screen=App.Capture();
Screen.SaveToFile("Screenshot.jpg");
}
if(Event.Type==sf::Event::Resized);{
glViewport(0, 0, Event.Size.Width, Event.Size.Height);
}
}
if(Clock.GetElapsedTime()>=time && ctr>0)
App.Close();
if(Clock.GetElapsedTime()>=n && ctr>0){
cout << n << endl;
n++;
}
if(
( Position.y+Sprite.GetSize().y>=PositionFood.y && Position.y<=PositionFood.x+Food.GetSize().y ) &&
( Position.x+Sprite.GetSize().x>=PositionFood.x && Position.x<=PositionFood.x+Food.GetSize().x )
){
speed+=0.1;
App.Clear(Color);
Food.SetPosition(rand()%280, rand()%280);
App.Draw(Food);
App.Draw(Sprite);
App.Display();
}
if(Clock.GetElapsedTime()>=t/100 && ctr>0){
Position=Sprite.GetPosition();
if(Position.y+Sprite.GetSize().y>=App.GetHeight())
y=-1;
if(Position.y<=0)
y=1;
if(Position.x+Sprite.GetSize().x>=App.GetWidth())
x=-1;
if(Position.x<=0)
x=1;
App.Clear(Color);
Sprite.SetPosition(Position.x+1.25*x*speed,Position.y+1.25*y*speed);
App.Draw(Sprite);
App.Draw(Food);
App.Display();
t++;
}
}
|