Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post by tuhoojabotti » Sat Dec 08, 2007 10:10 pm

Zrazy_Coder tässäpä sulle vastaus tässä on 7 framea mutta samalla tavalla se toimii 2 framesellakin kunhan drawimagessa on oikeat framet muuten tulee MAVia tosin tämä toimii vaan kuvilla...

Code: Select all

anim=LoadAnimImage("Media/note.bmp",32,32,0,8) 
MaskImage anim,cbmagenta

Repeat 

If MouseX()>0 And MouseY()>0 And MouseX()<32 And MouseY()<32 Then 
    DrawImage anim,0,0,3//tyhjä
Else 
DrawImage anim,0,0,7  //huutomerkki    
EndIf 

DrawScreen 
Forever
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”

Zrazy_Coder
Member
Posts: 60
Joined: Sun Sep 09, 2007 8:46 pm

Re: Tyhmät kysymykset

Post by Zrazy_Coder » Sat Dec 08, 2007 10:22 pm

Hmph.Kyllä tiiän miten toi tehään ja toimii se mun juttu jos siinä on yks animoitu painike, mutta jos siinä on kaks ja jos vie hiiren sen päälle joka on koodattu ennemmin niin mav sen joka on koodattu sen ensimmäisen jälkee toimii.Sor

evo

Re: Tyhmät kysymykset

Post by evo » Sun Dec 09, 2007 7:39 pm

Miten pystyy tekemään kahden saman tyypin objektin välisen törmäyksen, esim. kun kaksi esimerkki.TYYPPI - objektia törmäävät, ne tuhotaan.

User avatar
regalis
Advanced Member
Posts: 268
Joined: Mon Aug 27, 2007 9:44 pm

Re: Tyhmät kysymykset

Post by regalis » Sun Dec 09, 2007 9:28 pm

Code: Select all

For esimerkki.TYYPPI = Each TYYPPI
    For esimerkki2.TYYPPI = Each TYYPPI
        SetupCollision esimerkki\obj, esimerkki2\obj, 2, 2, 1
    Next esimerkki2
Next esimerkki

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez » Sun Dec 09, 2007 9:57 pm

Tuo regalisin koodi aiheuttaa mavin, koska siinä yritetaan asettaa jokaiselle objektille törmäys itsensä kanssa.

Code: Select all

Type UKOT
    Field obj
End Type

ukko = LoadObject("Media\guy.bmp", 72)
ShowObject ukko, OFF

For i = 1 To 10
    nu.UKOT = New(UKOT)
    nu\obj = CloneObject(ukko)
        
    For iu.UKOT = Each UKOT
        If iu <> nu Then    //Varmistetaan että ei aseteta törmäystä itsensä kanssa.
            SetupCollision nu\obj, iu\obj, 2, 2, 2   //Asetetaan törmäys
            SetupCollision iu\obj, nu\obj, 2, 2, 2 
        EndIf
    Next iu
Next i
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War

maukka
Newcomer
Posts: 5
Joined: Fri Dec 07, 2007 1:08 pm

Re: Tyhmät kysymykset

Post by maukka » Mon Dec 10, 2007 4:22 pm

Miks tää ei toimi? :o

Code: Select all

FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1

ukko = LoadObject ("Media\guy.bmp",72)

SetupCollision ukko, kartta, 1, 4, 2

Repeat

    If GetMap(3,ObjectX(ukko),ObjectY(ukko),kartta)=1 Then Goto kartta2


kartta2 = LoadMap ("Media/testmap.til","Media/tileset.bmp")


    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

    CloneCameraPosition ukko

    DrawScreen

Forever
Duuba dei!!

User avatar
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset

Post by Pate5 » Mon Dec 10, 2007 6:16 pm

maukka wrote:Miks tää ei toimi? :o

Code: Select all

FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ukko = LoadObject ("Media\guy.bmp",72)

SetupCollision ukko, kartta, 1, 4, 2

Repeat

    If GetMap(3,ObjectX(ukko),ObjectY(ukko),kartta)=1 Then Goto kartta2
        kartta2 = LoadMap ("Media/testmap.til","Media/tileset.bmp")
        deleteobject kartta
    endif


    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

    CloneCameraPosition ukko

    DrawScreen

Forever
Tässä on moniakin virheitä, mutta olet oikeilla jäljillä. ;)

Katsoppa manuaalista GoTo. Sillä ei ladata karttoja vaan liikutaan ohjelmassa.

Korjattu koodi:

Code: Select all

FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1

ukko = LoadObject ("Media\guy.bmp",72)

SetupCollision ukko, kartta, 1, 4, 2

Repeat

    If GetMap(3,ObjectX(ukko),ObjectY(ukko),kartta)=1 Then


kartta2 = LoadMap ("Media/testmap.til","Media/tileset.bmp")


    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

    CloneCameraPosition ukko

    DrawScreen

Forever
Tämä toimii kuitenkin vain yhden kartan kanssa. Jos haluat monta leveliä, tee kartta-muuttuja, jonka mukaan maa ladataan. Suosittelisin myös, että maan vaihtuessa kaikki poistetaan, ellet halua välttämättä seuraavaan maahan kaikkia samoja objekteja.

-Pate5
CoolBasic henkilökuntaa
Graafikko

evo

Re: Tyhmät kysymykset

Post by evo » Tue Dec 11, 2007 9:50 am

Tarkoitan siis, että minulla on monta boksi\obj - objektia BOKSIT tyypistä, ja niiden välille pitäisi saada törmäystunnistus.

Code: Select all

if objectsoverlap(boksi\obj,boksi\obj) then blaablaablaa
Tuo ei toimi, tai siis toimii, mutta silloin boksi\obj koskee aina myös itseensä.
Tuota Jonezin koodia en tajunnut.

User avatar
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset

Post by Pate5 » Tue Dec 11, 2007 10:14 am

evo wrote:Tarkoitan siis, että minulla on monta boksi\obj - objektia BOKSIT tyypistä, ja niiden välille pitäisi saada törmäystunnistus.

Code: Select all

if objectsoverlap(boksi\obj,boksi\obj) then blaablaablaa
Tuo ei toimi, tai siis toimii, mutta silloin boksi\obj koskee aina myös itseensä.
Tuota Jonezin koodia en tajunnut.
Tuossa jonezin koodissahan näytettiin juuri tuota.

Code: Select all

type boksit 'luodaan BOKSIT-tyyppi
    field obj
endtype

laatikko=loadobject("images/laatikko.png") 'ladataan laatikko-objekti
 
for i=1 to 5 'luodaan 5 laatikkoa
    boksi.boksit=new(boksit)
    boksi\obj=cloneobject(laatikko)
next i

for boksi.boksit=each boksit 'asetetaan kaikki laatikot törmäämään toisiinsa
    for boksi2.boksit=each boksit
        if boksi2<>boksi then
            setupcollision boksi\obj,boksi2\obj,1,1,2
            setupcollision boksi2\obj,boksi\obj,1,1,2
        endif
    next boksi2
next boksi
Tuossa viimeisessä kohdassa, tyypin kaikki jäsenet käydään läpi eri "nimillä". Toinen nimi on boksi, ja toinen boksi2. Jos boksi ja boksi2 eivät ole sama (<>), niin ne laitetaan törmäämään toisiinsa.

Ymmärsitkö? Yritä ainakin copy-pastettaa tuo koodiisi.
EDIT:

Jos haluat ObjectsOverlap-törmäyksen, tee se näin:

Code: Select all

for boksi.boksit=each boksit 'käydään boksit läpi
    for boksi2.boksit=each boksit
        if boksi2<>boksi then
            if objectsoverlap(boksi\obj,boksi2\obj) then blaablaa
        endif
    next boksi2
next boksi
[/edit]
CoolBasic henkilökuntaa
Graafikko

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

Re: Tyhmät kysymykset

Post by Marcoder » Tue Dec 11, 2007 11:42 am

Pate5 wrote:Tuossa viimeisessä kohdassa, tyypin kaikki jäsenet käydään läpi eri "nimillä". Toinen nimi on boksi, ja toinen boksi2.
Tuolla systeemillä loopataan ihan turhaan sillä siinä kaikkia jäseniä verrataan keskenään kahteen kertaan.
Koska CB:n tehot on muutenkin aika kortilla niin optimoidaan vähän ja seuraava yksinkertainen esimerkki kertoo varmasti kaiken.

Code: Select all

SCREEN 800, 600

Type boksit
    Field num
EndType

For i = 1 To 5
    b.boksit = New(boksit)
    b\num = i
Next i

Print "TAPA 1"
loop = 1
For boksi.boksit = Each boksit
    For boksi2.boksit = Each boksit
        Print "Boksi " + boksi\num + " vs. Boksi " + boksi2\num + "  (" + loop + ")"
        loop + 1
    Next boksi2
Next boksi

Print ""
Print "TAPA 2"
loop = 1
For boksi.boksit = Each boksit
    boksi2 = After(boksi)
    While boksi2 <> NULL
        Print "Boksi " + boksi\num + " vs. Boksi " + boksi2\num + "  (" + loop + ")"
        loop + 1
        boksi2 = After(boksi2)
    Wend
Next boksi

WaitKey

User avatar
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: Tyhmät kysymykset

Post by Pate5 » Tue Dec 11, 2007 3:21 pm

Marcoder wrote:
Pate5 wrote:Tuossa viimeisessä kohdassa, tyypin kaikki jäsenet käydään läpi eri "nimillä". Toinen nimi on boksi, ja toinen boksi2.
Tuolla systeemillä loopataan ihan turhaan sillä siinä kaikkia jäseniä verrataan keskenään kahteen kertaan.
Koska CB:n tehot on muutenkin aika kortilla niin optimoidaan vähän ja seuraava yksinkertainen esimerkki kertoo varmasti kaiken.

Code: Select all

SCREEN 800, 600

Type boksit
    Field num
EndType

For i = 1 To 5
    b.boksit = New(boksit)
    b\num = i
Next i

Print "TAPA 1"
loop = 1
For boksi.boksit = Each boksit
    For boksi2.boksit = Each boksit
        Print "Boksi " + boksi\num + " vs. Boksi " + boksi2\num + "  (" + loop + ")"
        loop + 1
    Next boksi2
Next boksi

Print ""
Print "TAPA 2"
loop = 1
For boksi.boksit = Each boksit
    boksi2 = After(boksi)
    While boksi2 <> NULL
        Print "Boksi " + boksi\num + " vs. Boksi " + boksi2\num + "  (" + loop + ")"
        loop + 1
        boksi2 = After(boksi2)
    Wend
Next boksi

WaitKey
Niinpä. Itselleni ei tullut mieleen noita After- ja Before-komentoja käyttää, koska itse en niitä ole melkein yhtään käyttänyt. Tapasi on kyllä nopeampi, mutta varmaankin hiukan vaikea aloittelijoille. Tästä on kyllä hyötyä ainakin isommilla määrillä.
CoolBasic henkilökuntaa
Graafikko

vieras

Re: Tyhmät kysymykset

Post by vieras » Thu Dec 13, 2007 5:50 pm

Väsään tässä tankkiammuskelua, ja kohtasin MAV-ongelman: kun tuhoan "vihun" tankin, toimii homma muuten (eli tankki poistetaan), mutta kun ammun vihutankin tuhoamisen jälkeen laukauksen, tulee MAV (peli siis pyörii muuten, pystyn liikuttamaan tankkia jne, mutta heti ammuttaessa pukkaa MAV)... Tässä koodipätkät joissa virheiden luulisi olevan:

Code: Select all

'Screenit ja FrameLimitit...

'tyyppien määritys
Type AMMUS
    Field obj
End Type 

Type TANKKI
    Field obj
    Field kesto As Float
    Field polttoaine As Float
    Field vauhti As Float
End Type

'objektien lataus (näiden lisäksi kartta ja muutama ääni)
vaunu1 = LoadObject ("vaunu1.bmp",72)
    ShowObject vaunu1, OFF
vaunu2 = LoadObject ("vaunu2.bmp",72)
    ShowObject vaunu2, OFF
pati = LoadObject ("ammus.bmp")
    ShowObject pati, OFF

'OMA VAUNU
OMA.TANKKI = New(TANKKI)

OMA\obj = CloneObject(vaunu1)
OMA\kesto = 100
OMA\polttoaine = 100

'VIHUN VAUNU
VIHU.TANKKI = New(TANKKI)

VIHU\obj = CloneObject(vaunu2)
VIHU\kesto = 100
VIHU\polttoaine = 100

'...objektien sijoittelu, törmäystunnistukset

Repeat

'sälää, kontrollit...

    'ammuntasysteemi
    If KeyHit(cbKeyRControl) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,OMA\obj      
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,OMA\obj        
        reload=50 'aseen lataus        
        PlaySound laukaus
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        'ammus & vihun vaunu törmää...
        If ObjectsOverlap (VIHU\obj,luoti\obj,2) Then
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            VIHU\kesto=VIHU\kesto-20
                'jos vihu tuhoutuu...
                If VIHU\kesto=<0 Then 
                    DeleteObject VIHU\obj
                    PlaySound räjähdys
                EndIf
            'ammus ylittää rajan & tuhoutuu   
            ElseIf ObjectX(luoti\obj)<-240 Or ObjectX(luoti\obj)>240 Or ObjectY(luoti\obj)<-240 Or ObjectY(luoti\obj)>240 Then     
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
        EndIf  
    Next luoti     

'sälää...

    DrawScreen

Forever


TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset

Post by TheFish » Thu Dec 13, 2007 9:46 pm

vieras wrote:Väsään tässä tankkiammuskelua, ja kohtasin MAV-ongelman: kun tuhoan "vihun" tankin, toimii homma muuten (eli tankki poistetaan), mutta kun ammun vihutankin tuhoamisen jälkeen laukauksen, tulee MAV (peli siis pyörii muuten, pystyn liikuttamaan tankkia jne, mutta heti ammuttaessa pukkaa MAV)... Tässä koodipätkät joissa virheiden luulisi olevan:

Code: Select all

'Screenit ja FrameLimitit...

'tyyppien määritys
Type AMMUS
    Field obj
End Type 

Type TANKKI
    Field obj
    Field kesto As Float
    Field polttoaine As Float
    Field vauhti As Float
End Type

'objektien lataus (näiden lisäksi kartta ja muutama ääni)
vaunu1 = LoadObject ("vaunu1.bmp",72)
    ShowObject vaunu1, OFF
vaunu2 = LoadObject ("vaunu2.bmp",72)
    ShowObject vaunu2, OFF
pati = LoadObject ("ammus.bmp")
    ShowObject pati, OFF

'OMA VAUNU
OMA.TANKKI = New(TANKKI)

OMA\obj = CloneObject(vaunu1)
OMA\kesto = 100
OMA\polttoaine = 100

'VIHUN VAUNU
VIHU.TANKKI = New(TANKKI)

VIHU\obj = CloneObject(vaunu2)
VIHU\kesto = 100
VIHU\polttoaine = 100

'...objektien sijoittelu, törmäystunnistukset

Repeat

'sälää, kontrollit...

    'ammuntasysteemi
    If KeyHit(cbKeyRControl) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 'luo uusi ammus
        luoti\obj=CloneObject(pati) 'tee klooni
        'asetetaan pati samaan paikkaan
        CloneObjectPosition luoti\obj,OMA\obj      
        'käännetään pati samaan suuntaan
        CloneObjectOrientation luoti\obj,OMA\obj        
        reload=50 'aseen lataus        
        PlaySound laukaus
    EndIf
    'päivitä aseen lataaminen
    If reload>0 Then reload=reload-1

    'ammukset
    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        'ammus & vihun vaunu törmää...
        If ObjectsOverlap (VIHU\obj,luoti\obj,2) Then
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            VIHU\kesto=VIHU\kesto-20
                'jos vihu tuhoutuu...
                If VIHU\kesto=<0 Then 
                    DeleteObject VIHU\obj
                    PlaySound räjähdys
                EndIf
            'ammus ylittää rajan & tuhoutuu   
            ElseIf ObjectX(luoti\obj)<-240 Or ObjectX(luoti\obj)>240 Or ObjectY(luoti\obj)<-240 Or ObjectY(luoti\obj)>240 Then     
                DeleteObject luoti\obj 'poista objekti
                Delete luoti 'poista luoti kokonaan
        EndIf  
    Next luoti     

'sälää...

    DrawScreen

Forever

Yrität tarkistaa luotien törmäyksen tankkiin joka on jo tuhottu. Ennen kuin tarkastat törmäyksen, katso että vihollis tankki on vielä olemassa.
CoolBasic henkilökuntaa
Kehittäjä

vieras

Re: Tyhmät kysymykset

Post by vieras » Thu Dec 13, 2007 11:35 pm

Tarkoititko tähän tapaan:

Code: Select all

    
'...
Type TANKKI
    Field obj
    Field kesto As Float
    Field polttoaine As Float
    Field vauhti As Float
    Field tila  '<-------------------lisätty-------------------!!!
End Type

'...

'VIHUN VAUNU
VIHU.TANKKI = New(TANKKI)

VIHU\obj = CloneObject(vaunu2)
VIHU\kesto = 100
VIHU\polttoaine = 100
VIHU\tila = 1 '1 = elossa, 0 = kuollut '<-------------------lisätty-------------------!!!

'...

Repeat

'...

For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        'ammus & vihun vaunu törmää...
        If VIHU\tila = 1 And  ObjectsOverlap (VIHU\obj,luoti\obj,2) Then '<-------------------lisätty-------------------!!!
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            VIHU\kesto=VIHU\kesto-20
                'jos vihu tuhoutuu...
                If VIHU\kesto=<0 Then //SIIRRÄ POIS FOR-JUTUSTA
                    VIHU\tila = 0   '<-------------------lisätty-------------------!!!
                    DeleteObject VIHU\obj
                    Delete VIHU
                    PlaySound räjähdys
                EndIf
       EndIf
Next luoti

'...

Forever
Tuo nimittäin poistaa tuon edellämainitsemani ongelman, mutta muutaman vihun tuhoutumisen jälkeisen laakin ampuminen saa jälleen MAVin, enkä tälläkään kertaa keksi ongelman aikaansaajaa.

Kiitos joka tapauksessa vaivannäöstä!

User avatar
beg
Newcomer
Posts: 19
Joined: Fri Dec 14, 2007 3:08 pm

Re: Tyhmät kysymykset

Post by beg » Fri Dec 14, 2007 3:29 pm

Tähän väliin kysyisin tääs tyhmän kysymyksen, eli miten saan tämän "polkupyörän" kallistumaan kun se osuu viistoon kuutioon kun nyt se ei erota vinoja kuutioita ja myös toinen, eli miten saan painovoiman alkamaan alusta. Aina kun "pyörä" tippuu esineelle se kyllä pysähtyy, mutta sitten kun mennään pois kuutiolta se tippuu hirveää vauhtia. Toivottavasti joku edes ymmärsi. Kiitos jo etukäteen jos joku jaksaa auttaa. Ja tuossa se koodi:

Code: Select all

SCREEN 150,150

FrameLimit 40

ShowMouse OFF
nappula1=LoadObject("media/aloitapeli.bmp")
nappula2=LoadObject("media/lopetapeli.bmp")

ClsColor cbwhite 

hiiri=LoadObject("media/cursor.bmp")

PositionObject nappula1,0,25
PositionObject nappula2,0,0

Repeat
    PositionObject  hiiri,mousewx(),mousewy()

    If ObjectsOverlap(hiiri,nappula1)And MouseHit(1) Then Goto peli
    If ObjectsOverlap(hiiri,nappula2)And MouseHit(1) Then End
    

    DrawScreen
   

Forever


peli:


 Const PAINOVOIMA = -0.1

SCREEN 320,240,0,cbfullscreen 
ClsColor cbwhite 

FrameLimit 40
pyörä = LoadObject("Media\pyörät.bmp", 72)
palikka1 = LoadObject("media\vihreäpalikka.bmp", 72)
palikka2 = LoadObject("media\vihreäpalikka.bmp", 72)
palikka3 = LoadObject("media\vihreäpalikka.bmp", 72)

PositionObject pyörä,10,0

PositionObject palikka1,0,-100
PositionObject palikka2,75,-97
PositionObject palikka3,-75,-70


SetupCollision pyörä,palikka1,1,1,2
SetupCollision pyörä,palikka2,1,1,2
SetupCollision pyörä,palikka3,1,1,2


RotateObject palikka2,20
RotateObject palikka3,90


Repeat

vauhti=0

CloneCameraPosition pyörä

 If UpKey() Then MoveObject pyörä,2 
    If DownKey() Then MoveObject pyörä,-2
    
      TranslateObject pyörä,vauhti,yPlus#
    yPlus=yPlus+PAINOVOIMA 'päivitä painovoima   
    
 UpdateGame 'päivitä törmäys
    CloneCameraPosition pyörä 'liimaa kamera
    
    maassa=0 'ilmassa jollei toisin käy ilmi
    törmäykset=CountCollisions(pyörä)
    'katsotaan tärmätäänkö kattoon tai lattiaan
    For i=1 To törmäykset
        If GetCollision(pyörä,i)=kenttä
            'lattia
            If CollisionAngle(pyörä,i)=90 Then 
                yPlus#=-1
                maassa=1 'jalat on maassa
            EndIf
            'katto
            If CollisionAngle(pyörä,i)=270 Then 
                yPlus#=-1
            EndIf
        EndIf
    Next i 
  
DrawScreen 
Forever 

TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Tyhmät kysymykset

Post by TheFish » Fri Dec 14, 2007 3:32 pm

vieras wrote:Tarkoititko tähän tapaan:

Code: Select all

    
'...
Type TANKKI
    Field obj
    Field kesto As Float
    Field polttoaine As Float
    Field vauhti As Float
    Field tila  '<-------------------lisätty-------------------!!!
End Type

'...

'VIHUN VAUNU
VIHU.TANKKI = New(TANKKI)

VIHU\obj = CloneObject(vaunu2)
VIHU\kesto = 100
VIHU\polttoaine = 100
VIHU\tila = 1 '1 = elossa, 0 = kuollut '<-------------------lisätty-------------------!!!

'...

Repeat

'...

For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        'ammus & vihun vaunu törmää...
        If VIHU\tila = 1 And  ObjectsOverlap (VIHU\obj,luoti\obj,2) Then '<-------------------lisätty-------------------!!!
            DeleteObject luoti\obj 'poista objekti
            Delete luoti 'poista luoti kokonaan
            VIHU\kesto=VIHU\kesto-20
                'jos vihu tuhoutuu...
                If VIHU\kesto=<0 Then //SIIRRÄ POIS FOR-JUTUSTA
                    VIHU\tila = 0   '<-------------------lisätty-------------------!!!
                    DeleteObject VIHU\obj
                    Delete VIHU
                    PlaySound räjähdys
                EndIf
       EndIf
Next luoti

'...

Forever
Tuo nimittäin poistaa tuon edellämainitsemani ongelman, mutta muutaman vihun tuhoutumisen jälkeisen laakin ampuminen saa jälleen MAVin, enkä tälläkään kertaa keksi ongelman aikaansaajaa.

Kiitos joka tapauksessa vaivannäöstä!
Väittäisin että ongelma on vieläkin sama. Poistat koko jäsenen typestä, joten se VIHU\tila ei tietenkään toimi. Sinun pitäisi käydä kaikki olemassa olevat vihut läpi (for-each loopilla) ja tarkastaa törmäys niihin, ja vältääkseen yleistä virhettä voin sanoa jo suoraan, että loopista pitää poistua kun vihu on tuhottu, ettei peli yritä tarkistaa poistetun luodin törmäystä vihuihin.
CoolBasic henkilökuntaa
Kehittäjä

Quest

Re: Tyhmät kysymykset

Post by Quest » Fri Dec 14, 2007 9:06 pm

Osaisiko, joku selittää, miksi tämä MAVittaa kun pelaaja "overlappaa" tähden?

Code: Select all

FrameLimit 40

tahdet=0
points=0

valikko:
ClearKeys

Repeat
VerticalText 375,50, "Valikko"

Text 10,50, "1.Aloita"
Text 10,70, "2.Ohje"
Text 10,90, "3.Tekijät"
Text 10,110, "L.Lopeta"

If KeyHit (cbkey1) Then Goto peli
If KeyHit (cbkey2) Then Execute ("Help/Ohje.txt")
If KeyHit (cbkey3) Then Execute ("Help/Tekijät.txt")
If KeyHit (cbkeyl) Then MakeError "Kiitos kun kokeilit"

DrawScreen
Until EscapeKey()

peli:
'ladataan kartta 
map=LoadMap("Media\tutorial.til","Media\tileset.bmp")

'ladataan tähti
star=LoadObject("Media\tahti.bmp")
ShowObject star,OFF
Const starsum=1
Dim tahti(starsum,1)
Gosub MakeStars

'ladataan maali
finish=LoadObject("Media\finish.bmp")
PositionObject finish, 230, -225

'ladataan pelaaja 
guy=LoadObject("Media\guy.bmp",72)
PositionObject guy,-300, 200

'törmäys pelaajan ja kartan välillä 
SetupCollision guy,map,1,4,2

MakeStars:
tahti(0,0)=CloneObject(star)
PositionObject tahti(0,0),190,-225
Return

Repeat

    'Kontrollit
    If LeftKey() Then TurnObject guy,5
    If RightKey() Then TurnObject guy, -5
    If UpKey() Then MoveObject guy,3
    If DownKey() Then MoveObject guy, -3
    
If ObjectsOverlap(guy,finish,3) Then
points+100
ClearObjects
Goto valikko

End If

If ObjectsOverlap(guy,tahti(0,0),3) Then
tahdet+1
points+50  
DeleteObject tahti(0,0)
End If
    
    
    'Kamera
    UpdateGame
    CloneCameraPosition guy
    DrawGame
Text 0,0,"Tähdet" +tahdet+ "/1"
Text 0,20,"Pisteet"+points
DrawScreen

Until EscapeKey()

Henkru
Advanced Member
Posts: 359
Joined: Sun Aug 26, 2007 2:46 pm

Re: Tyhmät kysymykset

Post by Henkru » Fri Dec 14, 2007 9:20 pm

Quest wrote:Osaisiko, joku selittää, miksi tämä MAVittaa kun pelaaja "overlappaa" tähden?

Code: Select all

.kkodia
Yrität tarkistaa törmääkö ukko ja tähti vaikka tähti on poistettu jo. Muuta tähden poiminta koodi tälläiseksi.

Code: Select all

    If poimittu = 0 Then 
        If ObjectsOverlap(guy,tahti(0,0),3) Then
            tahdet+1
            points+50 
            DeleteObject tahti(0,0)
            poimittu = 1
        EndIf
    EndIf 
Eli kun tähti poimitaan muutetaan poimittu-muutjan arvoksi 1.

Quest

Re: Tyhmät kysymykset

Post by Quest » Fri Dec 14, 2007 10:10 pm

Henkru wrote:
Quest wrote:Osaisiko, joku selittää, miksi tämä MAVittaa kun pelaaja "overlappaa" tähden?

Code: Select all

.kkodia
Yrität tarkistaa törmääkö ukko ja tähti vaikka tähti on poistettu jo. Muuta tähden poiminta koodi tälläiseksi.

Code: Select all

    If poimittu = 0 Then 
        If ObjectsOverlap(guy,tahti(0,0),3) Then
            tahdet+1
            points+50 
            DeleteObject tahti(0,0)
            poimittu = 1
        EndIf
    EndIf 
Eli kun tähti poimitaan muutetaan poimittu-muutjan arvoksi 1.
Joo, kiitos paljon!
Nyt toimii.

Connect
Newcomer
Posts: 17
Joined: Sun Dec 09, 2007 4:09 pm
Location: Konnevesi

Re: Tyhmät kysymykset

Post by Connect » Sun Dec 16, 2007 9:25 am

Miten pystyn tekeen hyvän tilesetin? :D
Tai miten saan ladattua tilesetin tilesteriin?

Locked