Objektit : funktiot

CLONEOBJECT


   KUVAUS

Kloonaa jo olemassa olevan objektin, ja sijoittaa sen pelimaailman keskelle. Vaikka kopioitava objekti olisi piilotettu, klooni ilmestyy näkyviin. Kulma ja sijainti nollataan. Kloonit perivät kaikki muut ominaisuudet isännältään.

Kloonaaminen on erittäin nopeaa. Siksi usein tarvitut objektit kannattaa ennemmin kloonata kuin ladata uudestaan levyltä. Kloonatut objektit eivät myöskään kuluta tietokoneen muistia. Kloonaaminen on hyödyllistä esimerkiksi suurien vihollismäärien tai ammuksien hallintaan.

Kloonatut objektit ovat riippuvaisia isännästään. Jos isäntä poistetaan, kloonit muuttuvat epäkelvollisiksi, ja kaatavat ohjelman. Siksi alkuperäinen objekti kannattaa ennemminkin piilottaa, eikä siihen kosketa sen jälkeen. Kaikki muut ovat klooneja. Tämä ns. Master-objektin olemus koskee kaikkia siitä tehtyjä klooneja. Muuttamalla master-objektin ulkonäköä myös kaikki kloonit muuttuvat. Oheinen esimerkki voi olla pitkä, mutta se näyttää mihin CloneObject soveltuu parhaiten.

One object to rule them all

Just don't kill the Master

   KÄYTTÖ
CLONEOBJECT (objektimuuttuja)

  • objektimuuttuja = Se muuttuja, joka sisältää kloonattavan objektin.

  • Katso myös: LOADOBJECT

       ESIMERKKI
    Type BULLETS
        Field obj
    End Type

    '- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    'MAIN PROGRAM
    '- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

    FrameLimit 40

    'load the soldier, turning detail 72
    guy=LoadObject("Media\soldier.bmp",72)

    'load the bullet (master-object) and hide it
    bullet=LoadObject("Media\bullet.bmp")
    ShowObject bullet,OFF

    ClsColor cbdark

    AddText "Arrows to turn, SPACE to shoot"

    'MAIN LOOP
    Repeat

        'Update turning
        If LeftKey() Then TurnObject guy,5
        If RightKey() Then TurnObject guy, -5
        
        'Shoot?
        If KeyDown(cbkeyspace) And reload=0
        
            newBullet.BULLETS= New(BULLETS)
            newBullet\obj=CloneObject(bullet)
            CloneObjectPosition newBullet\obj,guy
            CloneObjectOrientation newBullet\obj,guy
            'put the bullet at the end of the barrel
            MoveObject newBullet\obj,24
        
            reload=4
        EndIf
        
        'Update all BULLETS (move them forward)
        i=0
        For iBullet.BULLETS= Each BULLETS
            
            MoveObject iBullet\obj,6 'speed=6
            
            'delete bullet from collection if it
            'gets too far away
            If Distance2(iBullet\obj,guy)>200 Then
                DeleteObject iBullet\obj
                Delete iBullet
            EndIf
            
            i=i+1
            
        Next iBullet
        
        'Update reloading
        If reload>0 Then reload=reload-1
        
        Text 30,30,"Bulets to update: "+i
        
        'Don't forget this :)
        DrawScreen

    Until EscapeKey()

    <<TAKAISIN