Page 1 of 1

LieroXMapSystem (Melkein :D )

Posted: Mon Oct 15, 2007 2:54 pm
by elmo123
Tämä karttasysteemi on melkein LieroX-tyylinen, vain kaivaus puuttuu. :D Tällä hetkellä voi ladata tuhoutumattoman maaston ja valinnaisesti myös taustan.

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
Itse koodi:

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

Ja pikku esimerkki:

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

Kommentteja! :D
EDIT:

Aika purkkaa kyllä on, taidanpa yrittää liukutörmäystä :?


Re: LieroXMapSystem (Melkein :D )

Posted: Tue Oct 16, 2007 12:19 pm
by MaGetzUb
Kysäisisin vaan MILLÄ IHMEELLÄ AIJOT TOTEUTAA KAIVAMISEN!?! Sitä on tosi monet yrirttänyt ja harvat onnistunut. Imagella sais KAIVAMISEN onnistumaan.
EDIT:

Ukko ei liu-u x suuntiin, se jää kiinni kuvaan. :(


Re: LieroXMapSystem (Melkein :D )

Posted: Tue Oct 16, 2007 2:49 pm
by Ilmuri
Asiasta penikseen http://pox.fi/~ilmuri/march.rar. LOLOMGHIIRI.

Re: LieroXMapSystem (Melkein :D )

Posted: Thu Oct 25, 2007 10:06 pm
by Purple
Ihan hyvä. Tosin vaikea ohjata :)
Aika purkkaa kyllä on, taidanpa yrittää liukutörmäystä
Juuh nii on :roll:

Re: LieroXMapSystem (Melkein :D )

Posted: Sat Feb 23, 2008 12:47 pm
by Mickey
programmer of DSG wrote: Imagella sais KAIVAMISEN onnistumaan.
Niinkö, miten? :o

Re: LieroXMapSystem (Melkein :D )

Posted: Sat Feb 23, 2008 1:36 pm
by koodaaja
Mickey wrote:
programmer of DSG wrote: Imagella sais KAIVAMISEN onnistumaan.
Niinkö, miten? :o
DrawToImage. Piirrät siis kuvaan maskivärillä vaikka pallon siihen kohtaan, johon haluat kaivaa. Sitten näyttää siltä kuin karttaan tulisi aukko.

Re: LieroXMapSystem (Melkein :D )

Posted: Sat Mar 08, 2008 7:19 pm
by elmo123
koodaaja wrote:DrawToImage. Piirrät siis kuvaan maskivärillä vaikka pallon siihen kohtaan, johon haluat kaivaa. Sitten näyttää siltä kuin karttaan tulisi aukko.
Niin, tuolla tekniikalla pystyy, mutta kun kaivamista ruvetaan toteuttamaan objekteilla, niin se kuvalla maalaaminen aina kun räjähdys muokkaa maastoa koituu pelin hidastukseksi. :(

Re: LieroXMapSystem (Melkein :D )

Posted: Sat Mar 08, 2008 7:42 pm
by koodaaja
Juurikin tämän takia kannattaa käyttää kuvia kaikkeen, mitä tekee, ellei kyseessä satu olemaan ylhäältä kuvattu räiskintä tai tasoloikka ( tuhoutumattomalla maastolla ) joita varten objektit on (kuin) luotu.

Re: LieroXMapSystem (Melkein :D )

Posted: Wed Mar 12, 2008 10:06 pm
by nevssons
elmo123 wrote:
koodaaja wrote:DrawToImage. Piirrät siis kuvaan maskivärillä vaikka pallon siihen kohtaan, johon haluat kaivaa. Sitten näyttää siltä kuin karttaan tulisi aukko.
Niin, tuolla tekniikalla pystyy, mutta kun kaivamista ruvetaan toteuttamaan objekteilla, niin se kuvalla maalaaminen aina kun räjähdys muokkaa maastoa koituu pelin hidastukseksi. :(
Äly hoi! Älä jätä! Käytä paintobjektia!

Re: LieroXMapSystem (Melkein :D )

Posted: Wed Mar 12, 2008 10:19 pm
by TheFish
nevssons wrote:
elmo123 wrote:
koodaaja wrote:DrawToImage. Piirrät siis kuvaan maskivärillä vaikka pallon siihen kohtaan, johon haluat kaivaa. Sitten näyttää siltä kuin karttaan tulisi aukko.
Niin, tuolla tekniikalla pystyy, mutta kun kaivamista ruvetaan toteuttamaan objekteilla, niin se kuvalla maalaaminen aina kun räjähdys muokkaa maastoa koituu pelin hidastukseksi. :(
Äly hoi! Älä jätä! Käytä paintobjektia!
Eikös kuvalla maalaaminen tarkoita paintobjectia?

Re: LieroXMapSystem (Melkein :D )

Posted: Wed Mar 12, 2008 10:48 pm
by regalis
TheFish wrote:
nevssons wrote:
elmo123 wrote:Niin, tuolla tekniikalla pystyy, mutta kun kaivamista ruvetaan toteuttamaan objekteilla, niin se kuvalla maalaaminen aina kun räjähdys muokkaa maastoa koituu pelin hidastukseksi. :(
Äly hoi! Älä jätä! Käytä paintobjektia!
Eikös kuvalla maalaaminen tarkoita paintobjectia?
Tarkoittaa. Eli elmo123 tarkoitti juuri sitä, että paintobject hidastaa peliä liikaa.

Re: LieroXMapSystem (Melkein :D )

Posted: Thu Mar 13, 2008 6:41 pm
by nevssons
okei...