Funkkarit:
- LoadLieroXMap(kivi_kuva$,[tausta_kuva$]) - lataa lieroX-kartan
- InitLieroXMapCollision() - alustaa törmäykset, kutsuttava ennen törmäysobjektien liikuttelua
- SetupLieroXMapCollision(obj) - asettaa törmäystunnistuksen objektin kanssa
- UpdateLieroXMapCollisions() - päivittää törmäykset
- GetLieroXMapCollision(obj) - kertoo onko objekti törmännyt karttaan. Käyttö suositellaan UpdateLieroXMapCollisions()-funktion jälkeen
Code: Select all
//LIEROX MAP SYSTEM BY ELMO123
//
Const gravity=-0.02
Type COLLISIONOBJECTS
Field obj
Field oldx
Field oldy
Field iscollision
End Type
//Globaalit kuvat
Global objStone
Global objBack
//Lataa LieroX-tyylisen kartan:
//stone$ - tuhoutumaton kerroskuva,"kivi"
//[back$] - koristekerroskuva
Function LoadLieroXMap(stone$,back$="")
objStone = LoadObject(stone$)
ObjectPickable objStone,3
If back$<>"" Then objBack = LoadObject(back$)
EndFunction
//Asettaa törmäystunnistuksen
//karttan ja tietynobjektin kanssa
Function SetupLieroXMapCollision(object)
collobj.COLLISIONOBJECTS = New(COLLISIONOBJECTS)
collobj\obj = object
EndFunction
//Alustaa törmäyksen. Kutsu silmukassa ennen
//törmättävien objektien liikuttamista!
Function InitLieroXMapCollision()
For collobj.COLLISIONOBJECTS = Each COLLISIONOBJECTS
collobj\oldx = ObjectX(collobj\obj)
collobj\oldy = ObjectY(collobj\obj)
collobj\iscollision = 0
Next collobj
EndFunction
Function GetLieroXMapCollision(object)
For collobj.COLLISIONOBJECTS = Each COLLISIONOBJECTS
If collobj\obj = object Then Return collobj\iscollision
Next collobj
EndFunction
Function UpdateLieroXMapCollisions()
For collobj.COLLISIONOBJECTS = Each COLLISIONOBJECTS
If ObjectsOverlap(collobj\obj,objStone,3) Then PositionObject collobj\obj,collobj\oldx,collobj\oldy:collobj\iscollision = 1
Next collobj
End Function
Code: Select all
//LIEROX MAP SYSTEM BY ELMO123
//
Const gravity=-0.02
Type COLLISIONOBJECTS
Field obj
Field oldx
Field oldy
Field iscollision
End Type
//Globaalit kuvat
Global objStone
Global objBack
LoadLieroXMap("Media\level.bmp")
vene=LoadObject("Media\ship.bmp",72)
SetupLieroXMapCollision(vene)
Repeat
InitLieroXMapCollision()
'turn the ship
If LeftKey() Then TurnObject vene,5
If RightKey() Then TurnObject vene, -5
'thrust/update physics
If UpKey() Then
movex#=movex#+Cos(ObjectAngle(vene))*0.05
movey#=movey#+Sin(ObjectAngle(vene))*0.05
EndIf
'move the ship according to physics
movey=movey+gravity
If movey< -10 Then movey= -10
TranslateObject vene,movex,movey
Updatelieroxmapcollisions()
If GetLieroXMapCollision(vene) Then movey=-movey/2:movex=-movex/2
CloneCameraPosition vene
DrawScreen
Forever
//Lataa LieroX-tyylisen kartan:
//stone$ - tuhoutumaton kerroskuva,"kivi"
//[back$] - koristekerroskuva
Function LoadLieroXMap(stone$,back$="")
objStone = LoadObject(stone$)
ObjectPickable objStone,3
If back$<>"" Then objBack = LoadObject(back$)
EndFunction
//Asettaa törmäystunnistuksen
//karttan ja tietynobjektin kanssa
Function SetupLieroXMapCollision(object)
collobj.COLLISIONOBJECTS = New(COLLISIONOBJECTS)
collobj\obj = object
EndFunction
//Alustaa törmäyksen. Kutsu silmukassa ennen
//törmättävien objektien liikuttamista!
Function InitLieroXMapCollision()
For collobj.COLLISIONOBJECTS = Each COLLISIONOBJECTS
collobj\oldx = ObjectX(collobj\obj)
collobj\oldy = ObjectY(collobj\obj)
collobj\iscollision = 0
Next collobj
EndFunction
Function GetLieroXMapCollision(object)
For collobj.COLLISIONOBJECTS = Each COLLISIONOBJECTS
If collobj\obj = object Then Return collobj\iscollision
Next collobj
EndFunction
Function UpdateLieroXMapCollisions()
For collobj.COLLISIONOBJECTS = Each COLLISIONOBJECTS
If ObjectsOverlap(collobj\obj,objStone,3) Then PositionObject collobj\obj,collobj\oldx,collobj\oldy:collobj\iscollision = 1
Next collobj
End Function
Aika purkkaa kyllä on, taidanpa yrittää liukutörmäystä