Split Screen -esimerkki

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Split Screen -esimerkki

Post by Misthema »

Heh. Minulla oli tylsää ja teki mieli kikkailla CB:llä jotain, joten teinpä sitten yksinkertaisen "split screen" -esimerkin.

Koodi toimii kaikilla resoluutioilla, mutta jostain syystä pelaajat katoavat, jos ne menevät alle 0,0 koordinaattien, eli ulos "ruudusta". En sitten tiedä, kuinka tämän voisi korjata. :/
Pelaajat eivät tosin katoa, vaikka menisivät esimerkiksi 1000,1000 koordinaatteihin, ruudun resoluution ollessa vähemmän.

Koodia:

Code: Select all

SCREEN 800,600


// Ruudun koko
SW = ScreenWidth()
SH = ScreenHeight()

// Pelaajien ruudun koko
splitW = SW / 2
splitH = SH

// Pelaajien ruutujen kuvapuskurit (image buffer)
buf1 = MakeImage( splitW, splitH )
buf2 = MakeImage( splitW, splitH )

// Pelaajan #1 koordinaatit
x1 = 100
y1 = 100

// Pelaajan #2 koordinaatit
x2 = 300
y2 = 100


ClsColor 32,32,32
Repeat

    // Pelaajan #1 liikkuminen
    If KeyDown(cbKeyA) Then x1 = x1 - 1
    If KeyDown(cbKeyD) Then x1 = x1 + 1
    If KeyDown(cbKeyW) Then y1 = y1 - 1
    If KeyDown(cbKeyS) Then y1 = y1 + 1
    
    // Pelaajan #2 liikkuminen
    If KeyDown(cbKeyLeft)  Then x2 = x2 - 1
    If KeyDown(cbKeyRight) Then x2 = x2 + 1
    If KeyDown(cbKeyUp)    Then y2 = y2 - 1
    If KeyDown(cbKeyDown)  Then y2 = y2 + 1

    // Palloja!
    a# = WrapAngle(a + 1)
    
    Color 255, 255, 255
    For i=0 To 9
        x# = 200 + Cos( a + (36 * i) ) * 100
        y# = 150 - Sin( a + (36 * i) ) * 100
        
        Circle x - 2, y - 2, 5, 5
    Next i
    
    // Pelaajien pallot
    Color 255,0,0
    Circle x1,y1, 10,10
    
    Color 0,0,255
    Circle x2,y2, 10,10
    
    box1_X = x1 - splitW / 2 // Pelaajan #1 ruudun vasen yläkulma
    box1_Y = y1 - splitH / 2
    
    box2_X = x2 - splitW / 2 // Pelaajan #2 ruudun vasen yläkulma
    box2_Y = y2 - splitH / 2
    
    // Ruudunpuolikkaiden kopiointi kuvapuskureihin
    CopyBox box1_X, box1_Y, splitW, splitH, 0, 0, SCREEN(), Image(buf1)
    CopyBox box2_X, box2_Y, splitW, splitH, 0, 0, SCREEN(), Image(buf2)

    Cls
    
    // Piirretään pelaajien ruudut vierekkäin
    DrawImage buf1, 0, 0
    DrawImage buf2, splitW, 0
    
    // Valkoiset reunat laatikoille
    Color 255,255,255
    Box 0, 0, splitW, splitH, 0
    Box splitW, 0, splitW, splitH, 0
    
    // Aputekstejä
    Text 0,0,"WASD-näppäimet"
    Text 0,10,"X ja Y: " + x1 + ", "+ y1
    Text splitW,0,"Nuolinäppäimet"
    Text splitW,10,"X ja Y: " + x2 + ", "+ y2

    DrawScreen
    
Forever
Post Reply