Jäälleen toinen MAV ongelma

Voit pyytää apua ohjelmointiongelmiin täältä.
Ville
Newcomer
Posts: 5
Joined: Tue Dec 10, 2013 11:40 pm

Jäälleen toinen MAV ongelma

Eli hei,
olen tässä harjoitellut coolbasicciä ja kirjoitin tälläisen pelin:

Code: Select all

``````SCREEN 1024,600,0,2
tr=LoadObject("data\tr.png")
ttr=LoadObject("data\tr.png")
ShowObject ttr,OFF
tl=LoadObject("data\tl.png")
ShowObject tl,OFF
an=LoadAnimObject("data\an.png",100,100,0,2)
ShowObject an,OFF
ann=LoadAnimObject("data\ann.png",100,100,0,2)
ShowObject ann,OFF
trr=LoadObject("data\trr.png")
ShowObject trr,OFF
bg=LoadImage("data\bg.png")
FrameLimit 60
sl=LoadObject("data\sl.png",36)
gravity=1
og=LoadAnimObject("data\or.png",100,100,0,2)
tnr=LoadFont("times new roman",100)
oog=CloneObject(og)
SetFont tnr
Repeat
oy=-160
ox=560
ooy=-160
oox=-560
lvl=1
x=0
y=0
ShowObject sl,OFF
hit=0
y1=15
y2=0

Repeat
score=lvl-1
Text 10,10,score

TurnObject sl,-10
PositionObject tr,x,y
PositionObject sl,sx,sy
PositionObject og,ox,oy
PositionObject oog,oox,ooy

PlayObject og,0,1,0.1,ON
PlayObject oog,0,1,0.1,ON

If hit=0 Then
sx=x
sy=y
ShowObject sl,OFF
EndIf

DrawImage bg,0,500

If KeyDown(cbkeyright) Then x=x+5
If KeyDown(cbkeyleft) Then x=x-5

If x>512 Then x=512
If x<-512 Then x=-512

If jjump=<2 And KeyHit(cbkeyup) Then
jump=1
jjump=jjump+1
EndIf

If jump=1 Then
gravity=0
If c<15 Then
y=y+y1
c=c+1
y1=y1-1
EndIf
If c=15 Then PaintObject tr,ttr
If c=15 Then jump=0
If c=15 Then gravity=1
If c=15 Then y1=15
If c=15 Then c=0
EndIf

If y=<-160 Then y=-160
If y=-160 Then
jjump=0
y2=0
EndIf

If y>-160 And gravity=1 Then
y=y-y2
y2=y2+1
EndIf

If KeyDown(cbkeyright) Then PaintObject tr,an
If KeyDown(cbkeyleft) Then PaintObject tr,ann
If jjump=<2 and KeyHit(cbkeyup) Then PaintObject tr,trr

If KeyUp(cbkeyright) Then PaintObject tr,ttr
If KeyUp(cbkeyleft) Then PaintObject tr,tl

If KeyDown(cbkeyright) Then PlayObject tr,0,1,0.1,ON
If KeyDown(cbkeyleft) Then PlayObject tr,0,1,0.1,ON

If KeyDown(cbkeyright) Then orientation=0
If KeyDown(cbkeyleft) Then orientation=1
If KeyHit(cbkeyup) Then orientation=2

If KeyDown(cbkeyspace) And hit=0 And orientation=0 Then
hit=1
EndIf
If KeyDown(cbkeyspace) And hit=0 And orientation=1 Then
hit=2
EndIf
If KeyDown(cbkeyspace) And hit=0 And orientation=2 Then
hit=3
EndIf

If hit=1 Then
ShowObject sl,ON
If sx<512 Then
sx=sx+10
EndIf
If sx=>512 Then
ShowObject sl,OFF
hit=0
EndIf

EndIf

If hit=2 Then
ShowObject sl,ON
If sx>-512 Then
sx=sx-10
EndIf
If sx=<-512 Then
ShowObject sl,OFF
hit=0
EndIf

EndIf

If hit=3 Then
ShowObject sl,ON
If sy>-300 Then
sy=sy-10
EndIf
If sy=<-300 Then
ShowObject sl,OFF
hit=0
EndIf

EndIf

If x<ox Then ox=ox-lvl
If x>ox Then ox=ox+lvl
If score=>10 Then
If x>oox Then oox=oox+lvl
If x<oox Then oox=oox-lvl
EndIf

If ox=<x+50 And ox>x-50 And y-50=<oy Then Exit

If ox=<sx+50 And ox>sx-50 And sy-50=<oy Then
ox=560
hit=0
lvl=lvl+1
EndIf

If lvl=>10
If oox=<x+50 And oox>x-50 And y-50=<ooy Then Exit

If oox=<sx+50 And oox>sx-50 And sy-50=<ooy Then
oox=-560
hit=0
lvl=lvl+1
EndIf
EndIf

DrawScreen

Forever

Text 200,10,"You're dead!"
DrawScreen
Wait 1000
WaitKey
Forever

End
``````
juu on muute vähä pitkä...
mut ongelma siis on että kun kirjoitin tämän läppärilläni niin suoriutui ilman mitään ongelmia, mutta kun kopioin koodin pöytäkoneelleni (ja luonnollisesti kopioin myös kaikki kuvatiedostot) ja yritän suorittaa sovellusta niin se pyörii jonkin aikaa sujuvasti mutta heittää sitten puskista MAVin...
EDIT:

Täältä http://sdrv.ms/1f6CLL1 löytyy kaikki sourcet ja kuvat helpottamaan vian etsintää. Linkissä oleva koodi on tosin paljon erilainen kun yllä laittamani.

Last edited by Ville on Wed Dec 11, 2013 5:54 pm, edited 2 times in total.

Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Jäälleen toinen MAV ongelma

Kun sivulle nuolen nostaa ylös käytät PaintObjectia ja maalaat takaisin pysäytetyn kuvan. KeyDown kuitenkin palauttaa 1 samaan aikaan kun KeyUp palauttaa 1, joten PaitObjectin jälkeen koitat vielä animoida sitä PlayObjectilla. Pysäytetty versio kuitenkaan ei ole animoitava ja siitä syystä tulee MAV. Jos siirrät KeyUp-iffit KeyDown iffien taakse ongelmaa ei tule, koska PaintObjectia kutsutaan vasta PlayObjectin jälkeen. Sitten tuo If KeyDown(...) The PaintObject tr, an ja sitä seuraava rivi kannattaa vaihtaa käyttämään KeyHit funktiota koska tuo syöritettaan nyt joka loopin kierroksella mikä ei ole tarpeellista.
Vastaisuudessa suosittelen lähettämään testikoodit sellaisessa muodossa että ne voi suoraan ajaa vain kopioimalla ne editoriin eli kannattaa koodia lähettäessä vaihtaa kuvat CB:n mukana tuleviin oletusgrafiikoihin. (Esim "Media/guy.bmp" tai "Media\zerorun1.bmp") Silloin muiden on helppompaa tarttua ongelmaan, kun ei tarvitse ensin vaihtaa medioiden polkuja.
Tyhmät kysymykset on (nimestään huolimatta) useinmiten paras paikka yksinkertaisten ongelmien ratkaisun hakemiseen, eikä yksittäisen ongelman takia ole pakko luoda uutta viestiketjua.

Tervetuloa foorumeille.

Ville
Newcomer
Posts: 5
Joined: Tue Dec 10, 2013 11:40 pm

Re: Jäälleen toinen MAV ongelma

tein mainitsemasi muutokset mutta MAV jatkaa esiin hyppimistään.... ja nyt jos esim. juoksee oikealle ja vaihtaakin suunnan mutta sattuu painamaan molempia nuolinäppäimiä samaan aikaan niin ukko jää paikallaanolo asentoon.
tein uuden ketjun koska ajattelin että ongelma olisi hankalampi (niin kuin se näyttää vieläkin olevan...) ja koodin jätin muokkaamatta muille sopivaksi sillä ajattelin sen olevan epäolennainen ratkaisun kannalta vaan että vika olisi jossain muualla koska sama koodi toimii toisella koneella ja toisella koneella ei.