CheckCollide - Estä objekteja menemästä seinien läpi

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

CheckCollide - Estä objekteja menemästä seinien läpi

Post by elmo123 » Sun Dec 09, 2007 5:16 pm

Funktiolle syötetään parametreiksi objekti, jonka törmäys tarkistetaan, sekä liikutettava matka ja valinnaisesti menokulma. Kaikki objektit, joihin tarkistusobjektin täytyy törmätä, täytyy esitellä poimittavaksi ennen funktion kutsumista.

Käyttötapaesimerkki:

Code: Select all

'erittäin nopea luoti
ObjectPickable kartta,1
If CheckCollide(luoti\obj,56)=0 Then
    MoveObject luoti\obj,56
Else
    DeleteObject luoti\obj
    Delete luoti
EndIf
Funkkari:

Code: Select all

'Kun objektia liikutetaan liian nopeasti, se saataa mennä törmättävien objektien läpi.
'Tämä tarkistaa, ettei objekti liikkumismatkallaan mene minkään törmättävän läpi.
'Parametrit:
'obj = objekti, jonka törmäys tarkistetaan
'move = matka, jonka objekti kulkee
'[ang] = objektin menokulma. Käytä vain jos objektia liikutellaan muualle kuin objektin suuntaan.

'HUOM! Jotta funktio toimisi, kaikki objektit, johon törmäävän objektin pitäisi törmätä,
'pitää esitellä poimittavaksi. Lisäksi tämä kuuluisi tarkistaa ennen objektin liikuttelua!


Function CheckCollide(obj,move,ang = 0)
    
    If ang=0 Then ang = ObjectAngle(obj)
    
    objPicker = MakeObject()
    
    RotateObject objPicker,ang
    
    ObjectPick objPicker
    
    If PickedObject()=0 Then Return 0
    
    If Distance(PickedX(),PickedY(),ObjectX(obj),ObjectY(obj))<move+1 Then Return 1
    
End Function 
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.

Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!

User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: CheckCollide - Estä objekteja menemästä seinien läpi

Post by Ilmuri » Sun Dec 09, 2007 6:27 pm

Perkule, tuohan on aivan hemmetin kätevä systeemi. Itse tosin olisin laittanut funktion palauttamaan poimitun etäisyyden, jolloin halutessaan voisi liikkua sen maksimimatkan ennen törmäystä.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic

User avatar
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: CheckCollide - Estä objekteja menemästä seinien läpi

Post by Marcoder » Mon Dec 10, 2007 10:02 am

Ilmuri wrote:Perkule, tuohan on aivan hemmetin kätevä systeemi.
Paitsi että se kusee vähän.

Riittää kun lukee koodin niin huomaa ettei tuo voi toimia. Poimintaobjekti objPicker luodaan funkkarissa mutta sen sijainti on aina 0, 0. Sehän pitää asettaa samaan positioon kuin objekti jonka törmäystä ollaan tarkistamassa.
Eli CloneObjectPosition objPicker, obj heti MakeObjectin jälkeen niin homma toimii.

Sitten on toinen juttu joka ei varsinaisesti ole virhe vaan puute eli jos tuota käyttää vaikka ukkelin liikuttamisen yhteydessä niin äijä pääsee puolittain seinän sisään koska ObjectRangea ei huomioida.
Tämä nyt sinänsä ei ole paha juttu koska CB:n omat törmäyssysteemit kyllä ajavat asiansa ukkojen liikuttelussa mutta nopeasti liikkuvien ammusten kanssa CB:n systeemi on syvältä ja siihen tämä poimintahommeli on ihan ehdoton juttu.

User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: CheckCollide - Estä objekteja menemästä seinien läpi

Post by Misthema » Fri Jan 11, 2008 4:59 am

Yritin korjailla funktiota Marcoder mainitsemilla lisäyksillä, mutta siltikään tällaisessa tapauksessa ei toimi:

Code: Select all

If KeyHit(cbkeyLeft) And CheckCollide(ukko,32,180)=0 Then MoveObject ukko, -32, 0
En tiedä mikä tässä taas kusee, mutta eipä tunnu tarkistelevan mitään; ukko pomppaa suoraan seinän sisään.
Luulin jo löytäneeni tästä vastauksen ongelmaani, mutta siinä meni sekin toivo. :(

Post Reply