Zoomaus härpäke 2D peliin.
Posted: Tue Aug 03, 2010 2:26 am
En kerro mitään, testatkaa itse.
Ja skaalaimen minimi limit kusee. (Sen vähä täs nyt kerron etukäteen.)
Koodin käytännöllisyydestä en tiedä, mutta hauskaa katseltavaahan tämä on... Imo. x)
Ja skaalaimen minimi limit kusee. (Sen vähä täs nyt kerron etukäteen.)
Code: Select all
Const SW = 640
Const SH = 480
SCREEN SW, SH
'lataa kartta
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
ObjectPickable kartta, ON 'aseta se poimittavaksi
PlayObject kartta,0,0,1 'animoi kartta
'lataa pelaaja
ukko = LoadObject ("Media\guy.bmp",72)
'lataa vihulainen
vihu = LoadObject ("Media\guy.bmp",72)
ObjectPickable vihu, 2 'aseta se poimittavaksi
PositionObject vihu, 32,150 'sijoita ylemmäs
'törmäykset
SetupCollision ukko, vihu, 2, 2, 2
'kartta-törmäykset on hyvä esitellä viimeiseksi
SetupCollision ukko, kartta, 1, 4, 2
buf1 = MakeImage(SW, SH)
buf2 = MakeImage(SW, SH)
times# = 1
AddText "Välilyönnillä skaalain päälle/pois"
AddText "Hiiren rullasta taikka näppäimillä q/a säädä skaalaa."
suurennus = True
Repeat
SetWindow ""+FPS()
'Ukon ohjaus
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
If UpKey() Then MoveObject ukko,2
If DownKey() Then MoveObject ukko,-2
UpdateGame
DrawGame
//Alemmalla koodirivillä on iki-ihanaa purkkaa.. <3
If suurennus = True Then
PositionCamera ObjectX(ukko) - (SW * zoom#/2) + SW/2, ObjectY(ukko) + (SH * zoom#/2) - SH/2
Else
CloneCameraPosition ukko
EndIf
suurennus = suurennus Xor KeyHit(57)
times = times + MouseMoveZ()*0.005
times = times + 0.005*(KeyDown(cbkeyq) - KeyDown(cbkeya))
times = Max(0, times)
zoom# = Float(1/times)
If suurennus = True Then
DrawToWorld OFF
DrawToImage buf1 //Tyhennetään kuvapuskuri1:n jääneet turhat rojut maalaamalla se mustaksi.
Color cbblack
Box 0, 0, SW, SH
DrawToImage buf2 //Tyhennetään kuvapuskuri2:n jääneet turhat rojut maalaamalla se mustaksi myös.
Color cbblack
Box 0, 0, SW, SH
DrawToScreen
For i = 0 To SW
CopyBox Int(i*zoom#), 0, 1, SH, i, 0, SCREEN(), Image(buf1)
Next i
For i = 0 To SH
CopyBox 0, Int(i*zoom#), SW, 1, 0, i, Image(buf1), Image(buf2)
Next i
//Ei päästetä "Alkuperäistä" taustaa näkyviin.
Color 0, 0, 0
Box 0, 0, SW, SH
DrawImage buf2, 0, 0
EndIf
DrawScreen 'piirrä näyttö
Forever