Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
Ei ole. Ainoa mahdollisuus on luoda itse animaatiot erillisistä kuvista. Katso funktio LoadAnimImage(). Cb muuten tukee vain seuraavia tiedostomuotoja: bmp, jpg, png ja tga.
Re: Tyhmät kysymykset (I/2010)
Nyt olisi uusi ongelma, inspiraatio kärpänen iski, kun näin vanhalla nintendolla pelin, jossa hypittiin liikuvien laatikkojen päällä mahdollisimman korkealle.
Ja ajattelin tehdä siitä oman version, mutta ongelmana on, että pelihahmon ja laatikkojen välinen törmäys ei ota toimiakseen. Välillä törmäys toimii ja välillä ukko putoaa lootien läpi.
Olen määritellyt törmäyksen setupcollision.. blaa blaa, mistä voisi johtua, että lootat fuskaavat.
Ja toinen ongelma on, kun lootat ovat alussa paikoillaan rivissä niin boxeja voi kävellä oikealle suoraan, mutta kun yrität kävellä vasemmalle niin ukko kävelee paikoillaan aivan kuin törmäisi vasemman puoleiseen boxiin vaikka boxit ovat silti samassa nätissä rivissä.
Ja ajattelin tehdä siitä oman version, mutta ongelmana on, että pelihahmon ja laatikkojen välinen törmäys ei ota toimiakseen. Välillä törmäys toimii ja välillä ukko putoaa lootien läpi.
Olen määritellyt törmäyksen setupcollision.. blaa blaa, mistä voisi johtua, että lootat fuskaavat.
Ja toinen ongelma on, kun lootat ovat alussa paikoillaan rivissä niin boxeja voi kävellä oikealle suoraan, mutta kun yrität kävellä vasemmalle niin ukko kävelee paikoillaan aivan kuin törmäisi vasemman puoleiseen boxiin vaikka boxit ovat silti samassa nätissä rivissä.
Re: Tyhmät kysymykset (I/2010)
Kristallipalloni on nyt toistaiseksi korjattavana, joten voisitkos vaikka copypastata sitä koodiasikin tänne?Kasp3r wrote:Nyt olisi uusi ongelma, inspiraatio kärpänen iski, kun näin vanhalla nintendolla pelin, jossa hypittiin liikuvien laatikkojen päällä mahdollisimman korkealle.
Ja ajattelin tehdä siitä oman version, mutta ongelmana on, että pelihahmon ja laatikkojen välinen törmäys ei ota toimiakseen. Välillä törmäys toimii ja välillä ukko putoaa lootien läpi.
Olen määritellyt törmäyksen setupcollision.. blaa blaa, mistä voisi johtua, että lootat fuskaavat.
Ja toinen ongelma on, kun lootat ovat alussa paikoillaan rivissä niin boxeja voi kävellä oikealle suoraan, mutta kun yrität kävellä vasemmalle niin ukko kävelee paikoillaan aivan kuin törmäisi vasemman puoleiseen boxiin vaikka boxit ovat silti samassa nätissä rivissä.
Re: Tyhmät kysymykset (I/2010)
Aattelin vaan, että jos jollain ois ollu hyvää ideaa mikä vois olla pielessä, mut pistetään se koodikin nyt tänne, ei oo vaan mikään ihan lyhyt eikä mikään kaikkein siistein.
Code: Select all
'----------- ALUSTUS--------------------
loading = LoadImage("img/loading.jpg")
DrawImage loading,0,0
DrawScreen
'PLAYER
oikea=LoadAnimObject("img\walkright.png",15,26,0,4)
MaskObject oikea,32,156,0
ShowObject oikea,OFF
ObjectRange oikea,15,26
vasen=LoadAnimObject("img\walkleft.png",15,26,0,4)
MaskObject vasen,32,156,0
ShowObject vasen,OFF
ObjectRange vasen,15,26
pelihahmo=CloneObject(oikea)
ObjectRange pelihahmo,15,26
' CAMERA
camera = CloneObject(pelihahmo)
ShowObject camera,OFF
'BOXIT
boxi1=LoadObject("img/test.png")
boxi2=LoadObject("img/test.png")
boxi3=LoadObject("img/test.png")
boxi4=LoadObject("img/test.png")
boxi5=LoadObject("img/test.png")
boxi6=LoadObject("img/test.png")
'LAAVA
laava=LoadObject("img/lava.png")
MaskObject laava,255,0,255
veri=LoadImage("img/veri.png")
'COLLISIONS
SetupCollision pelihahmo,boxi1,1,1,2
SetupCollision pelihahmo,boxi2,1,1,2
SetupCollision pelihahmo,boxi3,1,1,2
SetupCollision pelihahmo,boxi4,1,1,2
SetupCollision pelihahmo,boxi5,1,1,2
SetupCollision pelihahmo,boxi6,1,1,2
'TAKASEINÄ
floor = MakeObjectFloor ()
seinä = LoadImage ("img\seinä.jpg")
lattia=LoadObject("img\lattia.jpg")
MaskObject lattia,255,0,255
DeleteImage loading
'----------------------------------------------
'*************** MAIN *************************
'----------------------------------------------
Repeat
Gosub Peli
DrawScreen
Forever
'----------------------------------------------
'*************** Valikko ******************
Tiedot:
Return
'----------------------------------------------
'*************** GAME (PELI) SILMUKKKA!!!! ********************
' ******************
'----------------------------------------------
Peli:
alusta:
loppuuko=False
ShowObject pelihahmo,ON
PositionObject pelihahmo,-32,-270
PositionObject boxi1,0,-250
PositionObject boxi2,32,-250
PositionObject boxi3,64,-250
PositionObject boxi4,96,-250
PositionObject boxi5,128,-250
PositionObject boxi6,160,-250
PositionObject lattia,0,-425
PositionObject laava,0,-825
PaintObject floor, seinä
'SILMUKKA
Repeat
'CAMERA
PositionObject camera,0,ObjectY(pelihahmo)
CloneCameraPosition camera
Gosub liiku
Gosub kosketukset
Gosub boxi
If KeyDown(cbkeyreturn) Then Goto alusta
DrawGame
Color cbwhite
score=ObjectY(pelihahmo) + 275 'SCORE mittari
Text 0,0,"Score:" +score
Text 100,0,"maassa:" +maassa
Text 200,0,"kosketus:" +collide
DrawToWorld ON,ON
Color cbRED
If loppuuko=True And ObjectY(pelihahmo)=-275 Then
DrawImage veri,ObjectX(pelihahmo)-40,287
Text 300,275,"GAME OVER - PRESS ESC TO QUIT! LOSER"
ShowObject pelihahmo,OFF
EndIf
DrawToWorld OFF,OFF
DrawScreen
Forever
Return
'*************** PELAAJAN LIIKKEET + PVOIMA ******************
liiku:
If maassa=False Then
py=py+pvoima 'päivitä painovoima
pvoima=-1
EndIf
TranslateObject pelihahmo,px,py
UpdateGame
px=0
If LeftKey() Then
PaintObject pelihahmo,vasen
PlayObject pelihahmo,1,4,0.25
px=-7
ElseIf RightKey() Then
PaintObject pelihahmo,oikea
px=7
PlayObject pelihahmo,1,4,0.25
Else
PlayObject pelihahmo,0
EndIf
If UpKey() And maassa=1 Then
py =8
newjump=1
ElseIf UpKey() And newjump=1 Then
py=13
newjump=0
EndIf
'PELAAJA EI SAA MENNÄ LATTIAN ALLE
If ObjectY(pelihahmo) < -275 Then PositionObject pelihahmo,ObjectX(pelihahmo),-275
If ObjectX(pelihahmo) < -300 Then PositionObject pelihahmo,300,ObjectY(pelihahmo)
If ObjectX(pelihahmo) > 300 Then PositionObject pelihahmo,-300,ObjectY(pelihahmo)
'Peli loppuu jos
If py>25 And collide<1 Then
PositionCamera 0,-275
loppuuko=True
EndIf
If playerstill=False Then
laavaaika=Timer()
playerstill=True
EndIf
ObjectOrder laava,1
If Timer()>laavaaika+3500 And ObjectY(laava)<-540 And ObjectY(pelihahmo)<-200 And loppuuko=False Then MoveObject laava,0,-2
If ObjectY(laava) > -540 And ObjectY(pelihahmo)<-270 Then loppuuko=True
Return
'*************** BOXIT ******************
boxi:
bx2=ObjectX(boxi1)
by2=ObjectY(boxi1)
bx3=ObjectX(boxi2)
by3=ObjectY(boxi2)
bx4=ObjectX(boxi3)
by4=ObjectY(boxi3)
bx5=ObjectX(boxi4)
by5=ObjectY(boxi4)
bx6=ObjectX(boxi5)
by6=ObjectY(boxi5)
If Timer()>aika+1000 Then
uusiks:
kx=ObjectX(pelihahmo)
ky=ObjectY(pelihahmo)
MoveObject boxi1,bx,by
PositionObject boxi2,bx2,by2
PositionObject boxi3,bx3,by3
sx = Rand(1,3)
sy = Rand(1,2)
' BOXIN LIIKE
If sx = 1 Then bx=-32
If sx = 2 Then bx=0
If sx = 3 Then bx = 32
If sy = 1 Then by = -32
If sy = 2 Then by = 0
aika=Timer()
EndIf
If ObjectX(boxi1) < -300 Then PositionObject boxi1,300,ObjectY(boxi1)
If ObjectX(boxi1) > 300 Then PositionObject boxi1,-300,ObjectY(boxi1)
'Tarkistaa overlappaakö
If ObjectsOverlap (pelihahmo, boxi1, 3)=1 Then Goto uusiks
Return
'*****************KOSKETUKSET***********************
kosketukset:
collide=CountCollisions(pelihahmo)
If ObjectY(pelihahmo)=-275 Then
maassa=True
ElseIf collide>0 Then
maassa=True
Else
maassa=False
EndIf
Return
Re: Tyhmät kysymykset (I/2010)
Vaikke sannoo,ko tossa sun koodissa olevat mediat on itse tehtyjä ja siksi ohjelmaa on vaikkee testata , pitäs kato ite ruveta väsään tommosii ukkoi ja muit medioi , mutt aattelin semmosta ehdottaa että,
jos pystysuuntainen liikkumiskomponentti kasvaa silloinkin kun ukko on laskeutunut laatikon päälle , niin jos se kasvaa edelleen ,niin se saavuttaa lopulta arvon , joka on hiukan suurempi kuin laatikon koko pystysuunnassa , ja silloinhan ukko putoaa koska laatikko jää tavallaan siihen pystysuuntaisen arvon väliin
en tiedä nyt että johtuuko sun onkelma tästä , mutta tää onki vaan ehdotus
jos pystysuuntainen liikkumiskomponentti kasvaa silloinkin kun ukko on laskeutunut laatikon päälle , niin jos se kasvaa edelleen ,niin se saavuttaa lopulta arvon , joka on hiukan suurempi kuin laatikon koko pystysuunnassa , ja silloinhan ukko putoaa koska laatikko jää tavallaan siihen pystysuuntaisen arvon väliin
en tiedä nyt että johtuuko sun onkelma tästä , mutta tää onki vaan ehdotus
Re: Tyhmät kysymykset (I/2010)
En nyt millään tajuu ,että miten tehtiin peliin aseenvaihto? Jotai Select-Case esimerkkejä löytyy,mutten oikein osaa niitä vielä.Eli mulla on nyt tollanen
Ja nyt en tiedä minne voin laittaa tiedot aseista?
jotai että
Toi ei tietenkää toimi,mutta ton tapasesti.
Jos koneellanne on joku purkkane esimerkki nii senditkää tänne nii voisin kattoa vaikka siitää=)
Code: Select all
Type Aseet
field damage
field reloadtime
field hinta
field obj
field id
jotai että
Code: Select all
Kivääri
Aseet\damage=15
aseet\reloadtime 4
aseet\hinta=4000
aseet\id=1
Jos koneellanne on joku purkkane esimerkki nii senditkää tänne nii voisin kattoa vaikka siitää=)
Re: Tyhmät kysymykset (I/2010)
2AMBJTO wrote:En nyt millään tajuu ,että miten tehtiin peliin aseenvaihto? Jotai Select-Case esimerkkejä löytyy,mutten oikein osaa niitä vielä.Eli mulla on nyt tollanenJa nyt en tiedä minne voin laittaa tiedot aseista?Code: Select all
Type Aseet field damage field reloadtime field hinta field obj field id
jotai ettäToi ei tietenkää toimi,mutta ton tapasesti.Code: Select all
Kivääri Aseet\damage=15 aseet\reloadtime 4 aseet\hinta=4000 aseet\id=1
Jos koneellanne on joku purkkane esimerkki nii senditkää tänne nii voisin kattoa vaikka siitää=)
Code: Select all
Dim Kivääri.Aseet
Kivääri.Aseet = New( Aseet )
Kivääri\damage = 15
Kivääri\reloadtime = 4
Kivääri\hinta = 4000
Kivääri\id = 1
Re: Tyhmät kysymykset (I/2010)
Ja miten voin sitte loopissa tarkistaa että mikä ase ID on käytössä?
onks se jotenki näin?
onks se jotenki näin?
Code: Select all
For kivääri.aseet = Each aseet
If aseet\id=1 then
kivääri ampumis koodi..
next kiivääri
Re: Tyhmät kysymykset (I/2010)
Ei, vaan talletat nykyisen aseen johonkin muuttujaan tai jotain. Et nyt selvästikään osaa aivan kunnolla, IMHO.1N1QQDT wrote:Ja miten voin sitte loopissa tarkistaa että mikä ase ID on käytössä?
onks se jotenki näin?Code: Select all
For kivääri.aseet = Each aseet If aseet\id=1 then kivääri ampumis koodi.. next kiivääri
Alkaisin tässä vaiheessa huudella Osmoa jos olisit rekisteröitynyt :/
Re: Tyhmät kysymykset (I/2010)
En voi käsittää miksi mavia pukkaa , olisin kiitollinen jos joku auttas.
Code: Select all
'Tehtävä a10:
'Tee sivulta kuvattu peli, jossa ammutaan tykillä.
'Lähtökulman ja lähtönopeuden saa valita nuolinappuloilla.
'kenties tykkiä voisi myös siirtää sopivaan kohtaan ruutua
'joka voisi auttaa osumista
'Ammu pati välilyönnistä. Tarkoituksena on osua satunnaisesti
'sijoitettuun maaliin, jolloin peli loppuu. Jos ammus menee
'ruudun ulkopuolelle, eikä osu maaliin, käyttäjä saa
'uuden mahdollisuuden. Lisäapua saat TranslateObject-komennon oppaasta.
'Vinkki: komennot Objektikomennot
Type AMMUS
Field obj
EndType
Type KOHDE
Field obj
EndType
Const PV=-0.16
Dim x,y,nax,nay,ln,lataus
x=0:y=-124
Dim tx As Float,ty As Float
SCREEN 600,300
imgmaa=MakeImage(400,9)
DrawToImage imgmaa
Color cbgreen
Box 0,0,400,3
Color cbblackskin
Box 0,3,400,6
DrawToScreen
imgtykinrunko=MakeImage(32,42)
DrawToImage imgtykinrunko
Color cbgold
Circle 3,16,26
Color cbsilver
Box 0,30,32,12
DrawToScreen
cannon=LoadObject("cannon.bmp",180)
imgammus=MakeImage(8,8)
DrawToImage imgammus
Color cbyellow
Circle 0,0,8
DrawToScreen
imgviuhu=MakeImage(32,32)
DrawToImage imgviuhu
Color cbcyan
Circle 0,0,32
DrawToScreen
objmaa=MakeObject()
PaintObject objmaa,-imgmaa
objtykinrunko=MakeObject()
PaintObject objtykinrunko,-imgtykinrunko
objammus=MakeObject()
PaintObject objammus,-imgammus
ShowObject objammus,OFF
objviuhu=MakeObject()
PaintObject objviuhu,-imgviuhu
ShowObject objviuhu,OFF
PositionObject objtykinrunko,x,y
CloneObjectPosition cannon,objtykinrunko
PositionObject objmaa,0,-143
kulma=90:ln=5
vlippu=0:osuma=0:kerta=0
aalippu=0:vklippu=0
Alku:
'While osuma=0
Repeat
If (vlippu=0 Or osuma=1) And kerta=0
v.KOHDE=New(KOHDE)
v\obj=CloneObject(objviuhu)
PositionObject v\obj,Rand(-500,500),Rand(-90,120)
kerta=1
EndIf
'Ehtolauseen vaiheet :
'1.1.kun ruutu piirretään 1.kerran,eikä panosta ole
'vielä lähetetty
'niin vlippu=0:osuma=0:kerta=0
'tulos= (tosi or epätosi) and tosi = tosi
'eli nyt cloneviuhu ilmestyy ja kerta=1
'1.2.jos panosta ei vieläkään lähetetä,vaan odotellaan ja pohditaan ja mietiskellään
'niin vlippu=0:osuma=0:kerta=1
'tulos (tosi or epätosi) and epätosi = epätosi
'cloneviuhu on näkyvissä edelleen,mutta uutta ei luoda
'1.3.kun panos lähetetään ja sitä animoidaan
'niin vlippu=1:osuma=0:kerta=1
'tulos (epätosi or epätosi) and epätosi = epätosi
'cloneviuhu vaan näkyy , mutta uutta ei luoda
'2.1.kun panoksen lentäessä tapahtuu osuma cloneviuhuun,
'osuma-muuttuja käy vain arvossa 1,mistä ei sinänsä ole mitään hyötyä
'ja sen voisi ehkä poistaakkin
'niin vlippu=0:osuma=0:kerta=0
'tulos (tosi or epätosi) and tosi = tosi
'nyt päästään luomaan uusi cloneviuhu - kerta=1
'2.2.uusi cloneviuhu on tullut näkyviin
'siten vlippu=0:osuma=0:kerta=1
'(tosi or epätosi) and epätosi = epätosi
'cloneviuhuja ei luoda enempää
'silmukka jatkuu-->
'panoksen kulma määritys
nax=RightKey()-LeftKey()
If nax=1
If kulma>34
kulma-1
EndIf
ElseIf nax=-1
If kulma<146
kulma+1
EndIf
EndIf
'panoksen lähtönopeus määritys
nay=KeyUp(cbkeyup)-KeyUp(cbkeydown)
If nay=1
If ln<10
ln+1
EndIf
ElseIf nay=-1
If ln>1
ln-1
EndIf
EndIf
'luodaan uusi jäsen - ammus
If KeyHit(cbkeyspace) And lataus=0 And vlippu=0
a.AMMUS=New(AMMUS)
a\obj=CloneObject(objammus)
'määrätään liikeradan osapituusrakenne
CloneObjectPosition a\obj,cannon
CloneObjectOrientation a\obj,cannon
MoveObject a\obj,16
'lataus=16
tx=Cos(kulma)*ln
ty=Sin(kulma)*ln
vlippu=1
EndIf
'If lataus
'lataus-1
'EndIf
'käydään ammukset läpi ja liikutetaan niitä
'myös rajaarvot huomioidaan
If vlippu=1
For a.AMMUS=Each AMMUS
'liikutetaan panosta kulman ja
'lähtönopeuden mukaan
TranslateObject a\obj,tx,ty
'painovoiman vaikutus pystysuunnassa
ty=ty+PV
For v.KOHDE=Each KOHDE
If ObjectsOverlap(a\obj,v\obj,2)
DeleteObject a\obj
Delete a
DeleteObject v\obj
Delete v
'aalippu=1
vklippu=1
vlippu=0
osuma=1:kerta=0
'Wait 1000
osuma=0
EndIf
Next v
If ObjectX(a\obj)<-290 Or ObjectX(a\obj)>290 Or ObjectY(a\obj)<-140
DeleteObject a\obj
Delete a
vlippu=0
EndIf
Next a
EndIf
RotateObject cannon,kulma
Text 10,10,"lähtökulma "+kulma
Text 10,30,"lähtönopeus "+ln
DrawScreen
'If osuma=1 Then Exit
Until EscapeKey()
'osuma=0
'Wend
End
EDIT:
No nyt toimii , kiitos VesQ !
Last edited by sankja on Sat Jul 10, 2010 9:27 am, edited 1 time in total.
Re: Tyhmät kysymykset (I/2010)
Riviltä 173 alkaa ongelmat. Tältä siis ongelmaosio näyttää:sankja wrote:En voi käsittää miksi mavia pukkaa , olisin kiitollinen jos joku auttas.
Code: Select all
For a.AMMUS=Each AMMUS
'liikutetaan panosta kulman ja
'lähtönopeuden mukaan
TranslateObject a\obj,tx,ty
'painovoiman vaikutus pystysuunnassa
ty=ty+PV
For v.KOHDE=Each KOHDE
If ObjectsOverlap(a\obj,v\obj,2)
DeleteObject a\obj // <----- HUOM!!! <------
Delete a // <----- HUOM!!! <------
DeleteObject v\obj
Delete v
'aalippu=1
vklippu=1
vlippu=0
osuma=1:kerta=0
'Wait 1000
osuma=0
EndIf
Next v
// HUOM!!! Tästä alas!
If ObjectX(a\obj)<-290 Or ObjectX(a\obj)>290 Or ObjectY(a\obj)<-140
DeleteObject a\obj
Delete a
vlippu=0
EndIf
Next a
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2010)
Tossa koitin tehä vihollisten kävelymoottoria esimerkki 3 pohjalta,mutta en saa sitä kunnolla toimimaan koittakaa.. niin huomaatte.
Ja onko komentoa jolla voisin tarkistaa että vihollinenx=sijaintix esim.3pikselin tarkkuudella?
Ja miten saan tuon vähemmän purkkaiseksi?
vihollinen jää nykimään,sillä se ei ole aivan samalla Vaaka tasolla kuin ukko?
Ja onko komentoa jolla voisin tarkistaa että vihollinenx=sijaintix esim.3pikselin tarkkuudella?
Ja miten saan tuon vähemmän purkkaiseksi?
vihollinen jää nykimään,sillä se ei ole aivan samalla Vaaka tasolla kuin ukko?
Code: Select all
'Esimerkki 3 : Liikkuva objekti
'================================================
'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
'Aja tämä ohjelma painamalla F5.
'Lopeta ohjelma painamalla ESC.
'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
FrameLimit 40 'rajoita pelin toimintanopeutta
'lataa pelihahmo
ukko = LoadObject("Media\guy.bmp", 4)
PositionObject ukko,150,-120
sotilas = LoadObject("Media\soldier.bmp", 4)
PositionObject sotilas,-150,120
ClsColor cbWhite
Repeat 'pääsilmukan alku
sijaintix=ObjectX(ukko)
sijaintiy=ObjectY(ukko)
vihollinenx=ObjectX(sotilas)
vihollineny=ObjectX(sotilas)
'ohjaa nuolilla
If LeftKey() Then TranslateObject ukko,-3,0:RotateObject ukko,180
If RightKey() Then TranslateObject ukko,3,0:RotateObject ukko,0
If UpKey() Then TranslateObject ukko,0,3:RotateObject ukko,90
If DownKey() Then TranslateObject ukko,0,-3:RotateObject ukko,270
If vihollinenx=<sijaintix+Rand(-2,2) Then
TranslateObject sotilas,2,0
RotateObject sotilas,0
ElseIf vihollinenx=>sijaintix+Rand(-2,2) Then
TranslateObject sotilas,-2,0
RotateObject sotilas,180
EndIf
If vihollinenx=sijaintix Then
paikalla=True
Else
paikalla=False
EndIf
If vihollineny=<sijaintiy And paikalla Then
TranslateObject sotilas,0,2
RotateObject sotilas,90
ElseIf vihollineny=>sijaintiy And paikalla Then
TranslateObject sotilas,0,-2
RotateObject sotilas,270
EndIf
Color cbblack
Text 0,0,"ukon sijainti X "+sijaintix
Text 0,30,"ukon sijainti Y "+sijaintiy
Text 0,60,"vihollisen sijainti X "+vihollinenx
Text 0,90,"vihollisen sijainti Y "+vihollineny
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2010)
Käytät Rand-komentoa, joka aiheuttaa sen nykimisen. Rand-komentohan tuottaa satunnaislukuja, että nyt kyllä vähän menit hakoseen.rpgmaker wrote:Tossa koitin tehä vihollisten kävelymoottoria esimerkki 3 pohjalta,mutta en saa sitä kunnolla toimimaan koittakaa.. niin huomaatte.
Ja onko komentoa jolla voisin tarkistaa että vihollinenx=sijaintix esim.3pikselin tarkkuudella?
Ja miten saan tuon vähemmän purkkaiseksi?
vihollinen jää nykimään,sillä se ei ole aivan samalla Vaaka tasolla kuin ukko?
Tuohon, että onko komentoa, jolla voisi tarkistaa tuon etäisyyden, niin ei varsinaisesti ole. Mutta voit hoitaa tarkistuksen käyttämällä If-lauseessa "And" avainsanaa, jonka avulla voit laittaa kaksi ehtoa yhteen. Eli voit tarkistaa, onko vihollinenx kolmen pikselin etäisyydellä sijaintix:stä käyttämällä tätä If-lausetta:
Code: Select all
If vihollinenx => sijaintix - 1 And vihollinenx =< sijaintix + 1
Niin, ja se tärinä johtuu itse asiassa myös siitä, että liikutat sitä soldier-objektia aina kahden pikselin verran. Jos siis satutaan jatkuvasti sellaiseen tilanteeseen, että se varsinainen "oikea kohta" jää siihen liikkeen väliin, niin se yrittää jatkuvasti korjata kääntämällä ukkoa ja liikuttamalla toiseen suuntaan. Harmi vain, että silloinkin pompataan yksi pikseli liian pitkälle, jolloin objektia käännetään ja sama ongelma toistuu jatkuvasti uudelleen.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2010)
Juu Siinä pitkin lukea Se Vaikutti aika paljon
Nyt laitoin,ettei se nykisi enää,mutta nyt vihollinen menee välillä selvästi eri tasolla kun ukko.5pikseliä eri tasolla?
Saisikohan tota mitenkää,että vihollinen menisi samaa linjaa eikä nykisi?Hidastamalla vihollisen nopeus 1 pikseliin,kun ollaan tarpeeksi lähellä?
Vai onko toi nyt tollai tarpeeks hyvä?
Ja onko jotai vähemmän purkkasta tapaa tehä toi mun äskön lähettämä koodin pätkä?
Code: Select all
vihollineny=ObjectY(sotilas)
Saisikohan tota mitenkää,että vihollinen menisi samaa linjaa eikä nykisi?Hidastamalla vihollisen nopeus 1 pikseliin,kun ollaan tarpeeksi lähellä?
Vai onko toi nyt tollai tarpeeks hyvä?
Ja onko jotai vähemmän purkkasta tapaa tehä toi mun äskön lähettämä koodin pätkä?
Code: Select all
If vihollinenx => sijaintix - 2 And vihollinenx =< sijaintix + 2 Then
paikalla=True
Else
paikalla=False
EndIf
Re: Tyhmät kysymykset (I/2010)
Tein sinulle saman toiminnallisuuden sisältävän koodipätkän, jonka olen toivottavasti kommentoinut sinulle tarpeeksi hyvin. Tässäpä se, ollos hyvä:rpgmaker wrote:Ja onko jotai vähemmän purkkasta tapaa tehä toi mun äskön lähettämä koodin pätkä?
Code: Select all
FrameLimit 40
// Ladataan objektit
ukko = LoadObject("Media\guy.bmp", 4)
sotilas = LoadObject("Media\soldier.bmp", 4)
// Muutetaan taustaväri ja piirtoväri
ClsColor cbWhite
Color cbBlack
// Asetetaan objektit randomisti NÄYTTÖKOORDINAATTIEN
// mukaan. Näytön koko on leveyssuunnassa 400 ja pystysuunnassa
// 300 oletuksena. Näin siis objektit asetetaan leveysuunnassa
// 20-380 väliin ja pystysuunnassa 20-280 väliin.
ScreenPositionObject ukko, Rand(20,380), Rand(20, 280)
ScreenPositionObject sotilas, Rand(20,380), Rand(20, 280)
Repeat
sivulle = RightKey() - LeftKey()
alas = DownKey() - UpKey()
If sivulle And alas Then
// Jos painetaan vasen-oikea nuolia ja
// ylös-alas nuolia samaan aikaan, niin
// ei käännetä ukkoa, vaan liikutetaan
// sitä ainoastaan sen NYKYISEEN suuntaan.
MoveObject ukko, 3
ElseIf sivulle Or alas Then
// Jos painettiin sivulle TAI ylös-alas, niin
// asetetaan ukko-objektin kulma vastaavasti.
If sivulle Then
If sivulle=1 Then
// sivulle-muuttujan arvo on 1, kun painettiin
// oikeaa nuolinäppäintä. Tällöin kun key-muuttuja
// asetetaan 0, käännetään objektia kulmaan 0*90 eli 0.
key=0
Else
// sivulle-muuttujan arvo ei ole 1, kun painettiin
// vasenta nuolinäppäintä. Tällöin kun key-muuttuja
// asetetaan 2, käännetään objektia kulmaan 2*90 eli 180.
key=2
EndIf
Else
If alas=1 Then
// alas-muuttujan arvo on 1, kun painettiin alaspäin
// osoittavaa nuolinäppäintä. Tällöin kun key-muuttuja
// asetetaan 3, käännetään objektia kulmaan 3*90 eli 270.
key=3
Else
// alas-muuttujan arvo ei ole 1, kun painettiin ylöspäin
// osoittavaa nuolinäppäintä. Tällöin kun key-muuttuja
// asetetaan 1, käännetään objektia kulmaan 1*90 eli 90.
key=1
EndIf
EndIf
// Objektin kääntö
RotateObject ukko, key*90
// Liikutetaan objektia sen NYKYISEEN suuntaan.
MoveObject ukko, 3
EndIf
// Katsotaan objektien välinen kulma
kulma = GetAngle2( ukko, sotilas )
// Katsotaan objektien välinen etäisyys
etäisyys = Distance2( ukko, sotilas )
Text 0, 0, "Objektien välinen kulma: "+kulma+" aste(tta)."
Text 0, 15, "Objektien etäisyys toisistaan: "+etäisyys+" pikseli(ä)."
If etäisyys => 2 Then
// Vain jos objektit ovat kahden tai useamman pikselin
// etäisyydellä toisistaan, liikutetaan/pyöritetään
// sotilas-objektia. Näin estetään tärinä.
If kulma < 90 Then
RotateObject sotilas, 180
Text 0, 30, "Sotilas liikkuu vasemmalle."
ElseIf kulma < 180 Then
RotateObject sotilas, 270
Text 0, 30, "Sotilas liikkuu alas."
ElseIf kulma < 270 Then
RotateObject sotilas, 0
Text 0, 30, "Sotilas liikkuu oikealle."
Else
RotateObject sotilas, 90
Text 0, 30, "Sotilas liikkuu ylös."
EndIf
MoveObject sotilas, 2
EndIf
DrawScreen
Forever
Koitas saada aikaiseksi se, että tuo sotilas vaihtaisi suuntaa kun kulmat ovat välillä 315-45, 45-135, 135-225, 225-315. Näin sillä ei olisi väliä, mihin suuntaan ukko menisi (vasta- tai myötäpäivään)
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2010)
Juu kiitos.Postaan nyt tän minkä ite tossa tein.Eli eka menee samalle x akselille sitte alaspäin,kun toi sun taas toimi kulmilla.Kumpi on sitte parempi vähemmän koodi määrän ja fps kannalta?Lisään ainakin vielä animaatiot ja vihollisen muutan typeksi.Eli kumpaa kannattaa käyttää?
Ja viholliset sijotan data kerroksee.Ja sitte pitää vielä kysyy sitä,että mistä löydän CBSDK ja se CB aarrearkku tai joku kirjasto.Missä oli kait positionobject2 komento tai joku semmonen..En löydä googlesta.Ja sitte vielä mietityttää tämmöne,että miten saan asetettuu esim. 50 vihollista datakerrokseen(numero1)
jos siinä kartalla on vaikka 500(numero1) datakerroksessa.Eli sijoittas randomilla sille alueelle.Eikä oo mikää neliönmuotonen alue,että ei toimi positionobject.Enkä viittis sillä alkaa säätää,ku pitäis ettii ne oikee koordinaatitki.Niitä numeroita paljo helpompi klikkailla data kerroksee
Ja viholliset sijotan data kerroksee.Ja sitte pitää vielä kysyy sitä,että mistä löydän CBSDK ja se CB aarrearkku tai joku kirjasto.Missä oli kait positionobject2 komento tai joku semmonen..En löydä googlesta.Ja sitte vielä mietityttää tämmöne,että miten saan asetettuu esim. 50 vihollista datakerrokseen(numero1)
jos siinä kartalla on vaikka 500(numero1) datakerroksessa.Eli sijoittas randomilla sille alueelle.Eikä oo mikää neliönmuotonen alue,että ei toimi positionobject.Enkä viittis sillä alkaa säätää,ku pitäis ettii ne oikee koordinaatitki.Niitä numeroita paljo helpompi klikkailla data kerroksee
Code: Select all
'Esimerkki 3 : Liikkuva objekti
'================================================
'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
'Aja tämä ohjelma painamalla F5.
'Lopeta ohjelma painamalla ESC.
'! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
FrameLimit 40 'rajoita pelin toimintanopeutta
'lataa pelihahmo
ukko = LoadObject("Media\guy.bmp", 4)
PositionObject ukko,150,-120
sotilas = LoadObject("Media\soldier.bmp", 4)
PositionObject sotilas,-150,120
ClsColor cbWhite
Repeat 'pääsilmukan alku
sijaintix=ObjectX(ukko)
sijaintiy=ObjectY(ukko)
vihollinenx=ObjectX(sotilas)
vihollineny=ObjectY(sotilas)
'ohjaa nuolilla
If LeftKey() Then
TranslateObject ukko,-3,0:RotateObject ukko,180
ElseIf RightKey() Then
TranslateObject ukko,3,0:RotateObject ukko,0
ElseIf UpKey() Then
TranslateObject ukko,0,3:RotateObject ukko,90
ElseIf DownKey() Then
TranslateObject ukko,0,-3:RotateObject ukko,270
EndIf
If vihollinenx=<sijaintix and paikalla=False Then
TranslateObject sotilas,2,0
RotateObject sotilas,0
ElseIf vihollinenx=>sijaintix And paikalla=False Then
TranslateObject sotilas,-2,0
RotateObject sotilas,180
EndIf
If vihollinenx => sijaintix - 2 And vihollinenx =< sijaintix + 2 Then
paikalla=True
Else
paikalla=False
EndIf
If vihollineny=<sijaintiy And paikalla Then
TranslateObject sotilas,0,2
RotateObject sotilas,90
ElseIf vihollineny=>sijaintiy And paikalla Then
TranslateObject sotilas,0,-2
RotateObject sotilas,270
EndIf
Color cbblack
Text 0,0,"ukon sijainti X "+sijaintix
Text 0,30,"ukon sijainti Y "+sijaintiy
Text 0,60,"vihollisen sijainti X "+vihollinenx
Text 0,90,"vihollisen sijainti Y "+vihollineny
Text 0,120,"FPS(rajoitettu 40): "+FPS()
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2010)
Huh, kun on paljon kysymyksiä yhdessä viestissä. Koitanpa vastailla..
Koodistas sen verran, että kun otat Repeat...Forever loopin alussa talteen objektien koordinaatit muuttujiin ja liikuttelet niitä objekteja sen jälkeen, niin nuo muuttujat eivät enää kerro objektien oikeita koordinaatteja. Eli jossain vaiheessa täytyy muuttujien arvot laittaa uudelleen, tai sitten pitää käyttää kaikkialla niitä alkuperäisiä ObjectX/Y-funktioita.
Siistin vähän koodias ja muutin siitä tuon edellisen pointtini takia koodia + lisäsin siihen y-suunnassa olevaan tarkistukseen vähän liikkumisvaraa (3px verran) ettei sotilas tärisisi. Nyt sen pitäis toimia.
No sinänsä toi sun tänhetkinen ratkaisu näyttää aika epäsiistiltä ja siksi lähdin ite tekemään toisenlaista. En tajunnut sitä ideaa, että pitäis mennä eka x-akselille niin siks tein kulmilla. Eipä se FPS:n kannalta vaikuta paljoa ollenkaan asiaan, että kummalla tavalla sen tekee.rpgmaker wrote:Juu kiitos.Postaan nyt tän minkä ite tossa tein.Eli eka menee samalle x akselille sitte alaspäin,kun toi sun taas toimi kulmilla.Kumpi on sitte parempi vähemmän koodi määrän ja fps kannalta?
Koodistas sen verran, että kun otat Repeat...Forever loopin alussa talteen objektien koordinaatit muuttujiin ja liikuttelet niitä objekteja sen jälkeen, niin nuo muuttujat eivät enää kerro objektien oikeita koordinaatteja. Eli jossain vaiheessa täytyy muuttujien arvot laittaa uudelleen, tai sitten pitää käyttää kaikkialla niitä alkuperäisiä ObjectX/Y-funktioita.
Siistin vähän koodias ja muutin siitä tuon edellisen pointtini takia koodia + lisäsin siihen y-suunnassa olevaan tarkistukseen vähän liikkumisvaraa (3px verran) ettei sotilas tärisisi. Nyt sen pitäis toimia.
Käy koko kartta läpi kahdella sisäkkäisellä For-loopilla (kts. funktiot MapWidth ja MapHeight manuaalista) ja tarkista jokainen tile GetMap2-funktiolla. Jos sitten löydät sen tilen, mihin objekti kuuluu laittaa, niin saat sen laitettua oikeaan kohtaan käyttämällä CB-SDK:n funktiota ObjectToMap. Laitan sen funktion tuohon alle, mutta huomaa, että sinun pitää vaihtaa gCurrentMap, gTileWidth ja gTileHeight muuttujien tilalle karttamuuttuja ja yhden tilen koko.rpgmaker wrote:Ja sitte vielä mietityttää tämmöne,että miten saan asetettuu esim. 50 vihollista datakerrokseen(numero1)
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: Tyhmät kysymykset (I/2010)
Juu kiitos Vielä semmone ,että saako cbsdk:ta mistään?Googlesta etin muttei se linkki toiminu,tai sitten se coolbasic koodikirjasto
Re: Tyhmät kysymykset (I/2010)
Mitä jos olisit käyttänyt foorumin hakutoimintoa..? Ja tämä topic taitaa olla enemmän tarkoitettu ohjelmointiin liittyviin kysymyksiin.rpgmaker wrote:Juu kiitos Vielä semmone ,että saako cbsdk:ta mistään?Googlesta etin muttei se linkki toiminu,tai sitten se coolbasic koodikirjasto
Mutta tässäpä tämä nyt on: http://jouluserver.com/~aave/cbsdk (Jouluserver tosin on alhaalla niin joudut odottelemaan)
EDIT:
Oho en tainnut lukea viestiäsi ihan kokonaan
Last edited by Viltzu on Sat Jul 10, 2010 1:08 pm, edited 1 time in total.
Re: Tyhmät kysymykset (I/2010)
Juu sanoin että en pääse sivulle.Nii aattelin,että jos joku vois upata sen tai tietäis toisen sivun millä ois ollu