![]() |
Anzeige:
|
|
|||||||
| Spiele & OpenGL Spiele in XProfan und Fragen zur Spieleprogrammierung |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Wie kann man 2 Vierecke abfragen die sich überlappen mit den Überlappungspunkten in der Fläche?
mfg |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Wenn du wissen willst, ob sich zwei Rechtecke überschneiden, kannst du die API UnionRect() benutzen.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Du kannst dir natürlich auch erst mal die XProfan-Funktionen @Intersect() und @Between (beide ab XProfan 11) anschauen.
Gruß Roland |
|
|
|
|
|
#4 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Jup, danke.
mfg |
|
|
|
|
|
#5 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Zitat:
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
|
#6 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Type RECT
Left As Long Top As Long Right As Long Bottom As Long End Type Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long An die IntersectRect-Funktion werden als Argumente drei Rechtecke (RECT) übergeben. Sie kontrolliert eine überlappung des zweiten und dritten Arguments und speichert das daraus resultierende übereinstimmung in das erste Argument. Außerdem gibt die Funktion den Wert "1" zurück, wenn es eine überschneidung gibt, und den Wert "0", wenn es keine übereinstimmung gibt. Wie kann man das oben in Profan umsetzen? Welche Struct wird da jetzt von Profan benutzt? mfg Geändert von profanfan (25.02.2009 um 22:34 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
@Intersect() und @Between
Ich benutze kein Opengl, sondern den normalen 2d-Modus. kann das dann auch anwenden? Gibt es dafür ein Beispielß mfg |
|
|
|
|
|
#8 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Ist diese Structur so richtig für den API-Aufruf?
declare rechteck1#,rechteck2#,rechteck3#,colli& STRUCT rect1 = x&,y&,w&,h& DIM rechteck1#, rect1 STRUCT rect2= x&,y&,w&,h& DIM rechteck2#, rect2 STRUCT rect3 = x&,y&,w&,h& DIM rechteck3#, rect3 colli&=~IntersectRect(rechteck1#,rechteck2#,rechteck3#) |
|
|
|
|
|
#9 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Zitat:
var r1# = new(xpRect) var r2# = new(xpRect) r1#.posx! = 0 r1#.posy! = 0 r1#.x! = 10 r1#.y! = 10 r2#.posx! = 10 r2#.posy! = 10 r2#.x! = 10 r2#.y! = 10 print intersect("r", r1#, r2#) waitinput Gruß Roland |
|
|
|
|
|
|
#10 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Habe hier mal auch von der API gestestet.
Funktioniert aber nicht. Zumindest müsste es doch rechnerisch hinhauen. Es wird immer "0" ausgegeben. Und beim verlassen des Programms, ein Absturz. Code:
$H Windows.ph
$H Messages.ph
Window 20,20-700,600
declare rechteck1#,rechteck2#,rechteck3#,colli%
STRUCT rect1 = x1%,y1%,w1%,h1%
DIM rechteck1#, rect1
STRUCT rect2= x2%,y2%,w2%,h2%
DIM rechteck2#, rect2
STRUCT rect3 = x3%,y3%,w3%,h3%
DIM rechteck3#, rect3
var hWin% = @Create("Window", %hWnd, "auto", 250,50, 500,500)
var bild_auto%=Create("hPic",-1,"auto.bmp")
declare x1%,y1%,xx1%,yy1%
x1%=50
y1%=50
xx1%=200
yy1%=200
var ende% = 0
StartPaint hwin%
DrawPic bild_auto%,xx1%,yy1%;0
EndPaint
WhileNot ende%
sleep 1
if isKey(65)
ende% = 1
endif
if isKey(69)
x1%=x1%+1
StartPaint hwin%
DrawPic bild_auto%,x1%,y1%;-1
EndPaint
cls
With rechteck1#
.x1%=0
.y1%=0
.w1%=0
.h1%=0
EndWith
With rechteck2#
.x2%=x1%
.y2%=y1%
.w2%=64
.h2%=64
EndWith
With rechteck3#
.x3%=200
.y3%=200
.w3%=64
.h3%=64
EndWith
colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
print colli%
endif
if isKey(81)
x1%=x1%-1
StartPaint hwin%
DrawPic bild_auto%,x1%,y1%;-1
EndPaint
cls
With rechteck1#
.x1%=0
.y1%=0
.w1%=0
.h1%=0
EndWith
With rechteck2#
.x2%=x1%
.y2%=y1%
.w2%=64
.h2%=64
EndWith
With rechteck3#
.x3%=200
.y3%=200
.w3%=64
.h3%=64
EndWith
colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
print colli%
endif
if isKey(83)
y1%=y1%+1
StartPaint hwin%
DrawPic bild_auto%,x1%,y1%;-1
EndPaint
cls
With rechteck1#
.x1%=0
.y1%=0
.w1%=0
.h1%=0
EndWith
With rechteck2#
.x2%=x1%
.y2%=y1%
.w2%=64
.h2%=64
EndWith
With rechteck3#
.x3%=200
.y3%=200
.w3%=64
.h3%=64
EndWith
colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
print colli%
endif
if isKey(87)
y1%=y1%-1
StartPaint hwin%
DrawPic bild_auto%,x1%,y1%;-1
EndPaint
cls
With rechteck1#
.x1%=0
.y1%=0
.w1%=0
.h1%=0
EndWith
With rechteck2#
.x2%=x1%
.y2%=y1%
.w2%=64
.h2%=64
EndWith
With rechteck3#
.x3%=200
.y3%=200
.w3%=64
.h3%=64
EndWith
colli%=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
print colli%
endif
EndWhile
End
|
|
|
|
|
|
|
#11 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hallo,
die Elemente der RECT-Struktur sind Longints, also muss hier das & verwendet werden. (Bei Strukturen gibt es einen Unterschied zwischen % (2 Byte) und & (4 Byte)!). Außerdem muß die Struktur nur einmal definiert werden und kann dann auf die drei Bereiche angewandt werden: Code:
STRUCT rect = x&,y&,w&,h& DIM rechteck1#, rect DIM rechteck2#, rect DIM rechteck3#, rect Code:
With rechteck1#
.x& = 0
.y& = 0
.w& = 0
.h& = 0
EndWith
With rechteck2#
.x& = x1%
.y& = y1%
.w& = 64
.h& = 64
EndWith
With rechteck3#
.x& = 200
.y& = 200
.w& = 64
.h& = 64
EndWith
|
|
|
|
|
|
#12 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Jup, jetzt werden alle 5 werte richtig ausgegeben.
Das überschneidende Rechteck ist eine tolle Sache mit dem Maßen. Kannst du noch einmal, nach dem Ogl-Speicher-Bild schauen? im anderern Thread. danke. mfg |
|
|
|
|
|
#13 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Mal eine kleine Demo mit 2 Quadraten, davon wird das eine mit den Tasten "q,w,e,s" gesteuert.
Die überschneidenden Werte werden im Fenster ausgegeben. Interessant sind die Daten, von der Fläche der beiden sich überschneidenden Quadrate. Damit kann man eigentlich eine schnelle präzise Punktauswerung herstellen, die dann mit XPIA und/oder Profan2Cpp beschleunigt wird. Code:
$H Windows.ph
$H Messages.ph
proc collison
StartPaint hwin&
DrawPic hintergr&,0,0;0
DrawPic bild_block&,xx1&,yy1&;0
DrawPic bild_auto&,x1&,y1&;0
EndPaint
With rechteck1#
.x& = 0
.y& = 0
.w& = 0
.h& = 0
EndWith
With rechteck2#
.x& = x1&
.y& = y1&
.w& = x1&+64
.h& = y1&+64
EndWith
With rechteck3#
.x& = 200
.y& = 200
.w& = 264
.h& = 264
EndWith
cls
colli&=~IntersectRect(rechteck1#,rechteck2#,rechteck3#)
print colli&
print rechteck1#.x&;" ";rechteck1#.y&;" ";rechteck1#.w&;" ";rechteck1#.h&
endproc
Window 20,20-200,100
declare rechteck1#,rechteck2#,rechteck3#
declare x1&,y1&,xx1&,yy1&,colli&
declare hWin&,bild_auto&,bild_block&,hintergr&,ende&
STRUCT rect = x&,y&,w&,h&
DIM rechteck1#, rect
DIM rechteck2#, rect
DIM rechteck3#, rect
hWin& = @Create("Window", %hWnd, "auto", 250,50, 500,500)
bild_auto&=Create("hnewpic",64,64,$0000ff)
bild_block&=Create("hnewpic",64,64,$ff0000)
hintergr&=create("hnewpic",500,500,$00ffff)
ende& = 0
x1&=50
y1&=50
xx1&=200
yy1&=200
WhileNot ende&
sleep 1
if isKey(65)
ende& = 1
endif
if isKey(69)
x1&=x1&+1
collison
endif
if isKey(81)
x1&=x1&-1
collison
endif
if isKey(83)
y1&=y1&+1
collison
endif
if isKey(87)
y1&=y1&-1
collison
endif
EndWhile
End
|
|
|
|
|
|
#14 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Zitat:
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#15 (Direktlink) |
|
Ist öfter hier
![]() Registriert seit: 21.02.2009
Beiträge: 71
|
Und warum wird damit nicht mal rausgerückt...hääää...
Ist in der Prosspeed aber als dll verkappselt....nicht reconstruierbar...oder? Hätte doch unser Profanconstructeur gut als Befehl mit einbauen können. mfg |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| USB Laufwerke überschneiden sich. Was tun? | sc20k | Windows XP | 8 | 19.03.2008 17:36 |
| speicherplatz berechnung | Tim25 | Allgemein | 1 | 14.02.2007 19:27 |
| berechnung von clustergröße einer HDD | nagg | Allgemein | 1 | 01.09.2005 17:46 |
| USB Geräte überschneiden sich? | diggler0221 | Hardware - Problemlösungen | 2 | 02.01.2005 11:15 |
| Berechnung Stromverbrauch bei Notebook | tronixx | Hardware - Problemlösungen | 15 | 05.08.2004 14:08 |