Tässä on tälläinen "pelimoottori", jossa näyt kaukaa vain talon katon ja sitä lähempänä ollaan niin katto muuttuu läpinäkyvämmäksi.
Katon läpinäkyvyyteen käytin oma tekemieni funktioita ExploreImage ja OpacityImage...
Code: Select all
SCREEN 500, 400
Dim Colour(10,10,2,1)//kuvien tiedot
Smooth2D ON
katto = LoadImage("media/map.bmp")
ResizeImage katto, 202,152
runko = MakeImage(200,150)
MaskImage runko, 255,0,255
DrawToImage runko //piirretään talo
Color 255,0,255
Box 0,0,200,150
Color 0,0,0
Box 0,0,75,5
Box 120,0,80,5
Box 0,145,80,5
Box 120,145,80,5
Box 0,0,5,150
Box 196,0,5,150
DrawToScreen
ruoho = MakeObjectFloor ()
nurmikko = LoadImage ("Media\grass.bmp")
lehmä = LoadImage("media\cow.bmp")
Color 123,90,0
Box 50,50,200,150 //piirretään lattia
Color 0,0,0
For i =1 To 250 Step 10 //lattia viivat
Line i,50,i, 200
Next i
DrawImage runko, 50,50
DrawImage lehmä, 70,70
DrawImage lehmä, 170,120
ExploreImage(katto,49,49) //analysoidaan rakennusta
Cls
Color 255,255,255
CenterText 250,200, "20%",2 // merkitään lataus
DrawScreen
Cls
Dim Talo(10)
a# = 0.0
For i=0 To 10
talo(i) = OpacityImage(katto,a) //eri näkyvyysarvot
CenterText 250,200, (20 + i*7) + "%",2 // merkitään lataus
DrawScreen
a = a+0.1
Next i
MaskImage talo(0), 255, 0, 255
PaintObject ruoho, nurmikko
mUkko = LoadImage("media/soldier.bmp")
Dim ukko(3)
For i= 0 To 360 Step 90
ukko(i/90) = CloneImage(mUkko)
RotateImage ukko(i/90), i
Next i
posX = 450
posY = 350
u = 2
Repeat
DrawGame
If KeyDown(205) //könkkö liikutettavuus =D
posX = posX + 1
u = 0
ElseIf KeyDown(203)
posX = posX - 1
u = 2
ElseIf KeyDown(200)
posY = posY - 1
u = 3
ElseIf KeyDown(208)
posY = posY + 1
u =1
EndIf
If posX > 45 And posX < 260 And posY > 45 And posY < 205 //talon sisällä
i = 0
Else
i = Min(Distance(posX, posY, 150, 125)/39,10) //näkyvyysarvo
EndIf
DrawImage talo(i), 49,49
DrawImage ukko(u), posX, posY
DrawScreen
Forever
//esivalmistellaan kuvaa...
Function ExploreImage(pic,picX,picY)
picW = ImageWidth(pic)
picH = ImageHeight(pic)
ReDim Colour(picW,picH,2,1)//laitettaan taulukko uuten kokoon
If picX > 0 And PicxX+picW < ScreenWidth() And picY > 0 And PicY+picH < ScreenHeight() //ettei mene ruuudun ulkopuolelle
Lock()
For x = 1 To picW
For y = 1 To picH
pixel = GetPixel2(picX + x, picY + y) //otettaan tausta talteen
Colour(x,y,0,0) = ((pixel Shl (1*8)) Shr 24)
Colour(x,y,1,0) = ((pixel Shl (2*8)) Shr 24)
Colour(x,y,2,0) = ((pixel Shl (3*8)) Shr 24)
Next y
Next x
Unlock()
DrawToImage pic
Lock()
For x = 1 To picW
For y = 1 To picH
pixel = GetPixel2(x,y) //otetaan itse kuva talteen
Colour(x,y,0,1) = ((pixel Shl (1*8)) Shr 24)
Colour(x,y,1,1) = ((pixel Shl (2*8)) Shr 24)
Colour(x,y,2,1) = ((pixel Shl (3*8)) Shr 24)
Next y
Next x
Unlock()
DrawToScreen
EndIf
EndFunction
//luodaan kuva
Function OpacityImage(pic,op#)
op = 1-op
picW = ImageWidth(pic)
picH = ImageHeight(pic)
newPic = MakeImage(picW,picH)
DrawToImage newPic
Lock()
For x = 1 To picW
For y=1 To picH
R = Colour(x,y,0,1)
G = Colour(x,y,1,1)
B = Colour(x,y,2,1)
ColorR = R+(Colour(x,y,0,0) -R)*op //yhdistetään värit
ColorG = G+(Colour(x,y,1,0) -G)*op
ColorB = B+(Colour(x,y,2,0) -B)*op
PutPixel2 x,y, (ColorB + ColorR Shl 16 + ColorG Shl 8) //pistettään se kasaan
Next y
Next x
Unlock()
DrawToScreen
Return newPic
EndFunction
Jä tässä pelkkä funktio. Explore tutkii kuvan taustan ja kuvan, jonka jälkeen voi käyttää Opacityä, joka palauttaa kuvan.
Code: Select all
Dim Colour(10,10,2,1)//kuvien tiedot
//esivalmistellaan kuvaa...
Function ExploreImage(pic,picX,picY)
picW = ImageWidth(pic)
picH = ImageHeight(pic)
ReDim Colour(picW,picH,2,1)//laitettaan taulukko uuten kokoon
If picX > 0 And PicxX+picW < ScreenWidth() And picY > 0 And PicY+picH < ScreenHeight() //ettei mene ruuudun ulkopuolelle
Lock()
For x = 1 To picW
For y = 1 To picH
pixel = GetPixel2(picX + x, picY + y) //otettaan tausta talteen
Colour(x,y,0,0) = ((pixel Shl (1*8)) Shr 24)
Colour(x,y,1,0) = ((pixel Shl (2*8)) Shr 24)
Colour(x,y,2,0) = ((pixel Shl (3*8)) Shr 24)
Next y
Next x
Unlock()
DrawToImage pic
Lock()
For x = 1 To picW
For y = 1 To picH
pixel = GetPixel2(x,y) //otetaan itse kuva talteen
Colour(x,y,0,1) = ((pixel Shl (1*8)) Shr 24)
Colour(x,y,1,1) = ((pixel Shl (2*8)) Shr 24)
Colour(x,y,2,1) = ((pixel Shl (3*8)) Shr 24)
Next y
Next x
Unlock()
DrawToScreen
EndIf
EndFunction
//luodaan kuva
Function OpacityImage(pic,op#)
op = 1-op
picW = ImageWidth(pic)
picH = ImageHeight(pic)
newPic = MakeImage(picW,picH)
DrawToImage newPic
Lock()
For x = 1 To picW
For y=1 To picH
R = Colour(x,y,0,1)
G = Colour(x,y,1,1)
B = Colour(x,y,2,1)
ColorR = R+(Colour(x,y,0,0) -R)*op //yhdistetään värit
ColorG = G+(Colour(x,y,1,0) -G)*op
ColorB = B+(Colour(x,y,2,0) -B)*op
PutPixel2 x,y, (ColorB + ColorR Shl 16 + ColorG Shl 8) //pistettään se kasaan
Next y
Next x
Unlock()
DrawToScreen
Return newPic
EndFunction
EDIT:Esa94 - Eipä taida olla =DD mutta sillä on helppo talettaa kuvat muistiin =D