ich habe es geschafft den vector korrekt zu berechnen
hab es so gemacht:
|
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
83
84
85
86
87
|
if(player_xAxis_min > box_xAxis_max || player_xAxis_max < box_xAxis_min)
{
//
}
else
{
if(player_yAxis_min > box_yAxis_max || player_yAxis_max < box_yAxis_min)
{
//
}
else
{
float distanceX = 0.0f;
float distanceY = 0.0f;
if(player_xAxis_min < box_xAxis_min)
{
distanceX = player_xAxis_max - box_xAxis_min;
distanceX = -distanceX;
}
else
{
if(player_xAxis_max > box_xAxis_max)
{
distanceX = player_xAxis_min - box_xAxis_max;
distanceX = -distanceX;
}
}
if(player_yAxis_min < box_yAxis_min)
{
distanceY = player_yAxis_max - box_yAxis_min;
distanceY = -distanceY;
}
else
{
if(player_yAxis_max > box_yAxis_max)
{
distanceY = player_yAxis_min - box_yAxis_max;
distanceY = -distanceY;
}
}
float dx = distanceX;
float dy = distanceY;
if(distanceX < 0)
{
dx = -distanceX;
}
if(distanceY < 0)
{
dy = -distanceY;
}
if(dx < dy)
{
if(dx == 0)
{
dx = 1;
dy = 0;
}
else
{
dx = 0;
dy = 1;
}
}
else
{
if(dy == 0)
{
dy = 1;
dx = 0;
}
else
{
dy = 0;
dx = 1;
}
}
result = (dx > dy) ? D3DXVECTOR2(0.0f, 1.0f) * distanceY : D3DXVECTOR2(1.0f, 0.0f) * distanceX;
player_position += result;
}
}
|
also 1. wird überprüft ob sich bei allen achsen (X, Y) die projizierten vectoren überschneiden, wenn ja
2. wird geguck wo der player sich bewindet - links oder rechts, oben oder unten vom box aus, und die größe der überlappungen(X, Y) wird berechnet
3. dann muss verglichen werden welche der überlappungen(X, Y) die kleinste is (ohne vorzeichen)
4. zum schluss wird die länge der übberlappung mit dem achsenvector multipliziert und zur position addiert.
habt ihr bessere möglichkeiten dies zu realisieren?
danke
-mfg JasonB