Objektit : funktiot

OBJECTSOVERLAP


   KUVAUS

Kertoo, ovatko kaksi objektia millään tavoin kosketuksissa toistensa kanssa.

Laatikkokosketus
Objektien päällä on näkymätön laatikko, joka rajaa objektit samaan tapaan kuin niiden kuvarajat. Tämä voi olla epätarkka joidenkin objektien kohdalla (kts. komennon ImagesCollide esimerkki).

Pallokosketus
Objektien päällä on näkymätön pallo. Kosketustapa vastaa kahden biljardipallon törmäystä. Tähän vaikuttaa objektien halkaisijat, joita voidaan vaihtaa komennolla ObjectRange. Tämä on suositeltava kosketustapa, ja yleensä tarkka.

Pikselikosketus
Kaikkein tarkin kosketustapa. Tarkastus on pikselintarkka, ja se ottaa huomioon objektien kulmat ja jopa animaatio-framen. Tarkastus on myös kaikkein raskain.

Palauttaa 1, jos päällekkäisyyttä esiintyy, muutoin nolla.

   KÄYTTÖ
OBJECTSOVERLAP (obj1, obj2, [tapa])

  • obj1 = Ensimmäinen objekti.
  • obj2 = Toinen objekti.
  • tapa (valinnainen)
    1 = Laatikkokosketus (oletus)
    2 = Pallokosketus
    3 = Pikselikosketus

  •    ESIMERKKI
    FrameLimit 40
    ShowMouse OFF
    DrawToWorld ON

    soldier=LoadObject("Media\soldier.bmp",360)
    ObjectRange soldier,46

    target=LoadObject("Media\crosshair.bmp")

    'some text
    Color cbblack
    AddText "1 = Box-based"
    AddText "2 = Circle-based"
    AddText "3 = Pixel-based"

    'default
    method=1

    ClsColor cbwhite

    Repeat

        'Change mode
        If KeyHit(cbkey1) Then method=1
        If KeyHit(cbkey2) Then method=2
        If KeyHit(cbkey3) Then method=3

        TurnObject soldier,1

        Select method
            Case 1 'box
                Box ObjectX(target) -8,ObjectY(target)+8,16,16,OFF
                Box ObjectX(soldier) -23,ObjectY(soldier)+23,46,46,OFF
                Text 100,250,"Overlap (box): "+ObjectsOverlap(soldier,target,1)
            Case 2 'circle
                Circle ObjectX(target) -8,ObjectY(target)+8,16,OFF
                Circle ObjectX(soldier) -23,ObjectY(soldier)+23,46,OFF
                Text 100,250,"Overlap (circle): "+ObjectsOverlap(soldier,target,2)
            Case 3 'pixel
                Text 100,250,"Overlap (pixel): "+ObjectsOverlap(soldier,target,3)
        End Select
        
        PositionObject target,MouseX() -200, -MouseY()+150

        DrawScreen

    Until EscapeKey()

    <<TAKAISIN