Collisionsroutine über Alphakanal
Verfasst: 13.02.2009 22:01
Unten ist eine Collisonsroutine in Freebasic die sehr schnell ist.
Diese läuft über dem Alphakanal.
Die Transparente Farbe ist $ff00ff.
Ich kann die für Purebasic nicht umsetzen.
Wer kann das mal anschauen und in Purebasic umsetzen. Es lohnt sich.
Ich kann es nicht.
mfg
Diese läuft über dem Alphakanal.
Die Transparente Farbe ist $ff00ff.
Ich kann die für Purebasic nicht umsetzen.
Wer kann das mal anschauen und in Purebasic umsetzen. Es lohnt sich.
Ich kann es nicht.
mfg
Code: Alles auswählen
TYPE obj
x AS INTEGER
y AS INTEGER
w AS INTEGER
h AS INTEGER
ox AS INTEGER
oy AS INTEGER
END TYPE
DIM AS obj ufo,baum
WITH ufo
.x=0
.y=0
.w=140
.h=140
END WITH
WITH baum
.x=0
.y=0
.w=800
.h=600
END WITH
DIM AS UINTEGER PTR img_ufo,img_baum
img_ufo = IMAGECREATE(ufo.w,ufo.h)
img_baum= IMAGECREATE(baum.w,baum.h)
PAINT img_ufo,(2,2),RGB(255,0,255)
CIRCLE img_ufo,(19,19),15,RGB(100,100,255),,,,F
PAINT img_baum,(2,2),RGB(255,0,255)
CIRCLE img_baum,(44,44),40,RGB(0,160,0),,,,F
LINE img_baum,(0,0)-(10,150),RGB(160,160,0),bf
CIRCLE img_baum,(244,244),70,RGB(0,160,255),,,,F
LINE img_baum,(100,200)-(130,440),RGB(160,255,0),bf
CIRCLE img_baum,(544,144),70,RGB(0,0,255),,,,F
LINE img_baum,(450,200)-(500,460),RGB(160,255,0),bf
LINE img_baum,(600,100)-(700,200),RGB(255,0,0),bf
DIM AS INTEGER mx,my,osX,osY,px,py,collision
DIM AS UINTEGER pufo,pbaum
DO
GETMOUSE mx,my
ufo.x=mx-20
ufo.y=my-20
'die Hochkomma bitte entfernen
PUT (baum.X,baum.y),img_baum,TRANS
PUT (ufo.X,ufo.y),img_ufo,TRANS
IF(((ufo.x >= baum.x AND ufo.x <= baum.x+baum.w) OR _
(baum.x >= ufo.x AND baum.x <= ufo.x+ufo.w)) AND _
((ufo.y >= baum.y AND ufo.y <= baum.y+baum.h) OR _
(baum.y >= ufo.y AND baum.y <= ufo.y+ufo.h))) THEN
ufo.ox=0
ufo.oy=0
baum.ox=0
baum.oy=0
osX=ufo.w
osY=ufo.h
IF(osX > baum.w) THEN osX = baum.w
IF(osY > baum.h) THEN osX = baum.h
IF ufo.x < baum.x THEN
ufo.ox = baum.x - ufo.x
IF baum.x+baum.w > ufo.x+ufo.w THEN osX=ufo.x+ufo.w-baum.x
ELSE
baum.ox = ufo.x - baum.x
IF ufo.x + ufo.w > baum.x + baum.w THEN osX=baum.x+baum.w-ufo.x
END IF
IF(ufo.y < baum.y) THEN
ufo.oy = baum.y - ufo.y
IF(baum.y+baum.h > ufo.y+ufo.h) THEN osY=ufo.y+ufo.h-baum.y
ELSE
baum.oy = ufo.y - baum.y
IF(ufo.y + ufo.h > baum.y + baum.h) THEN osY=baum.y+baum.h-ufo.y
END IF
'POINT liefert hier (32bpp) einen Farbwert mit ALPHA-channel(hat mit Transparenz zu tun) vorne dran
'also &HFFFF00FF
'aus diesem Grund sind puo und pbaum auch UINTEGER
FOR px=0 TO osX-1
FOR py=0 TO osY-1
pufo=POINT(ufo.ox + px,ufo.oy + py,img_ufo)
pbaum=POINT(baum.ox + px,baum.oy + py,img_baum)
IF pufo<>&HFFFF00FF AND pbaum<>&HFFFF00FF AND collision=0 THEN collision=1
NEXT py
NEXT px
IF collision THEN
LOCATE(3,1):PRINT "!!!!!! Kollision !!!!!"
END IF
collision=0
ELSE
LOCATE(1,1):PRINT " "
LOCATE(3,1):PRINT " "
END IF
SCREENCOPY
CLS
LOOP UNTIL INKEY <>""
IMAGEDESTROY img_ufo
IMAGEDESTROY img_baum
END