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