Tuohan olikin kätsä homma. Sitten vaan tekemään viirusta, joka täyttää kiintolevyt random datalla...Sly_Jack0 wrote:ItzRaines wrote:Uskon, että tuon saa toimimaan, kunhan sinulla vain on kaikki tiedostot nimeltään välillä 0 ja 999. Kauhee homma luoda tuhat tiedostoa(?)CB manual @ OpenToWrite wrote:Avaa tiedoston kirjoittamista varten. Jos tiedostoa ei ole olemassa, se luodaan. OpenToWrite palauttaa nollan, jos tiedostoa ei voitu kirjoittaa. Mahdollisia syitä ovat levytilan loppuminen, kirjoitussuojaus tai että kyseessä on kansio.
Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
viewtopic.php?p=49483#p49483ItzRaines wrote:Tuohan olikin kätsä homma. Sitten vaan tekemään viirusta, joka täyttää kiintolevyt random datalla...Sly_Jack0 wrote:ItzRaines wrote:Uskon, että tuon saa toimimaan, kunhan sinulla vain on kaikki tiedostot nimeltään välillä 0 ja 999. Kauhee homma luoda tuhat tiedostoa(?)CB manual @ OpenToWrite wrote:Avaa tiedoston kirjoittamista varten. Jos tiedostoa ei ole olemassa, se luodaan. OpenToWrite palauttaa nollan, jos tiedostoa ei voitu kirjoittaa. Mahdollisia syitä ovat levytilan loppuminen, kirjoitussuojaus tai että kyseessä on kansio.
Re: Tyhmät kysymykset (I/2011)
Luo tiedoston jonka nimi on 10 merkkiä pitkä (plus .txt pääte) ja siinä on merkkejä väliltä a-z. Lisätehtäväksi numeroiden ja ääkkösten lisäys?
Code: Select all
f = OpenToWrite(RandomString(10)+".txt")
WriteString f, "LOL KEK"
CloseFile f
Function RandomString(length)
s$ = ""
For i=0 To length-1
s$ = s$ + Chr(Rand(97, 122))
Next i
Return s$
EndFunction
Re: Tyhmät kysymykset (I/2011)
No tiedostoon noi merkit a-z + å + ä + ö + 1-9 ja sen jälkeen randilla ja seekfilellä arvot sieltä random rivin, luet sen ja kirjoitat siihen tiedostonimeen. Kun nimi on valmis, poista filu.temu92 wrote:Luo tiedoston jonka nimi on 10 merkkiä pitkä (plus .txt pääte) ja siinä on merkkejä väliltä a-z. Lisätehtäväksi numeroiden ja ääkkösten lisäys?
Code: Select all
f = OpenToWrite(RandomString(10)+".txt") WriteString f, "LOL KEK" CloseFile f Function RandomString(length) s$ = "" For i=0 To length-1 s$ = s$ + Chr(Rand(97, 122)) Next i Return s$ EndFunction
EDIT:
Kai nämä muistipaloillakin saisi, vaan enpä osaa auttaa kun en ole asiaan perehtynyt.
Aloittelija, koodaaja, jotain...
Re: Tyhmät kysymykset (I/2011)
Noniin, päätin kysäistä asiasta ensiksi täällä... Tahtoisin tehdä pelin, jossa on 8-bit tyyppinen liikkuminen, grafiikka, yms.
Ongelmana vain on, että projekti jumittaa kun alan tekemään edellämainittua liikkumista - en älyä, että miten sen hahmon saa liikkumaan 16 pikseliä nimettyyn suuntaan ja toistamaan kolme framea tässä samalla. Lisäksi hahmolla on paha tapa liukua yli "gridistä" niin, että kollidoi kartan kanssa kohdassa, jossa sen ei pitäisi.
Mitään vinkkejä/snipukoita?
Ongelmana vain on, että projekti jumittaa kun alan tekemään edellämainittua liikkumista - en älyä, että miten sen hahmon saa liikkumaan 16 pikseliä nimettyyn suuntaan ja toistamaan kolme framea tässä samalla. Lisäksi hahmolla on paha tapa liukua yli "gridistä" niin, että kollidoi kartan kanssa kohdassa, jossa sen ei pitäisi.
Mitään vinkkejä/snipukoita?
Re: Tyhmät kysymykset (I/2011)
Tarkoitatko siis, että pelikenttä on jaettu 16x16 tileihin ja pelihahmo on aina tilen keskellä? Kun pelaaja sitten haluaa liikkua esim. vasemmalle, niin hahmo liikkuu automaattisesti 16 pikseliä vasemmalle ja näyttää samalla animaation.
Re: Tyhmät kysymykset (I/2011)
jep, ja hahmon kuuluu "kävellä" kyseiseen tileen, shunpon sijasta
Re: Tyhmät kysymykset (I/2011)
Tarvitaan lisää koodia. Puran ajatuksesti nyt näin kokeneena koodarina osiin:Rogem wrote:jep, ja hahmon kuuluu "kävellä" kyseiseen tileen, shunpon sijasta
#1 Mitä meidän pitää tehdä, kun pelaaja sörkii liikkumis näpäinten kanssa? -Liikuttaa pelaajaa.
#2 Kuinka meidän pitää liikuttaa pelaajaa? -Pykälittäin, 16x16 ruudukossa. Pelaaja on aina keskellä tileä, kun emme liiku.
#3 Kuinka liikumme tilestä toiseen? -Kun pelaaja painaa näppäintä, aloitamme usean framen kestävän animaation, jonka aikana pelaaja siirretään toiseen tileen. Animaation aikana emme ota huomioon liikenäppäimiä, eli pelaaja ei voi vaikuttaa pelihahmon liikeeseen animaation aikana. Kun animaatio päättyy, pelaaja voi liikuttaa hahmoa jälleen.
Huomaa, miten paljon yksityiskohtia paljastuu näinkin "simppelistä" pelimekaniikasta.
Paljastan muutaman muuttujan joita ainakin tarvitaan:
-animaatio_kaynnissa (liikuuko pelihahmo???)
-valittu_suunta (esim. 1-4. arvo määräytyy sen perusteella, mihin suuntaan olemme liikkumassa animaation aikana.)
-On selkeästi impulsiivinen koodaaja joka...
Re: Tyhmät kysymykset (I/2011)
Väsäsinpäs tässä jonkinlaisen esimerkin. En ikävä kyllä keksinyt, millä kaavalla animaatio-nopeuden pystyisi laskemaan joka kerta oikein riippumatta FPS:stä ja liikkumisnopeudesta eli joudut ns. kovakoodaamaan animaation nopeuden jos jollain muulla ei ole ratkaisua siihen (ongelma liittyy siis PlayObjectiin, ilman objekteja se olisi paljon helpompaa). Idea tässä on aika samanlainen, mitä JATothrim jo sanoikin. Tilen koko on oletuksen 64x64 (koska Zero on aika iso), mutta sitä voi pienentää muuttamalla vakioita TileWidth ja TileHeight. Kaiken pitäisi pyöriä oikein ainakin 16x16 tilekokoon asti (ainakin tasakokoisilla tileillä).
Code: Select all
FrameLimit 30 // Rajoitetaan pelin nopeutta. Tämä lähinnä siksi
// että animaatio pyörii oikeaa nopeutta
Const TileWidth = 64 // Vakioita, jotka määrittävät tilen leveyden ja korkeuden.
Const TileHeight = 64 // Näitä muuttamalla saa ruudukon pienemmäksi. Kaikki laskut
// on siis sidottu näihin vakioihin eikä esim. lukuun 64. Siis
// näitä muuttamalla kaiken pitäisi toimia oikein pienmilläkin tilekoilla
// (olen testannut vain tasakokoisilla tileillä 16x16 asti).
Const IDLE = 0 // Vakioita, jotka helpottavat muistamista. Eli siis, kun haluaa asettaa esim. suunnan oikeaksi voi kirjoittaa
Const VASEN = 1 // "suunta = OIKEA" sen sijaan, että täytyisi muistella, oliko oikea nyt numero 1 vai 2 ("suunta = 1"). Toinen
Const OIKEA = 2 // vaihtoehto olisi käyttää merkkijonomuuttujaa, mutta se menee mielestäni vain sotkuiseksi.
Const LiikkumisNopeus = 2 // Vakio, joka määrää ukon liikkumisnopeuden (animaatio ei toimi oikein muuttamatta AnimaatioNopeutta, jos tätä muuttaa).
Const AnimaationNopeus = 0.4 // Vakio, joka määrää animaation pyörimisnopeuden, jotta animaatio pysähtyy oikeassa kohdassa
zero_oikea = LoadAnimObject("Media\zerorun1.bmp", 47, 51, 0, 13) // Ladataan animoidut objektit ja asetetaan maskiväri
MaskObject zero_oikea, 255, 0, 255
zero_vasen = LoadAnimObject("Media\zerorun2.bmp", 47, 51, 0, 13)
MaskObject zero_vasen, 255, 0, 255
ShowObject zero_vasen, OFF // Piilotetaan vasemmalle juokseva zero
suunta = OIKEA // Alustetaan suunta oikeaksi. Suunta siis muistaa, mihin suuntaan zero katsoo
liiku = IDLE // Alustetaan liiku idleksi. liiku muistaa suunnan, mihin liikutaan (se on siis IDLE, kun ei liikuta).
waypoint_x = 0 // Alustetaan waypoint. Waypoint on siis se kohde, mitä kohti zero lähtee liikkumaan, kun nappia painetaan
waypoint_y = 0
ScreenPositionObject zero_oikea, 2.5*TileWidth, 2.5*TileHeight // Asetetaan zerot keskelle ruudukkoa
ScreenPositionObject zero_vasen, 2.5*TileWidth, 2.5*TileHeight
Repeat
If liiku = IDLE Then // Liikutetaan vain, jos ei olla liikkumassa
If KeyHit(cbkeyLeft) Then
liiku = VASEN
If suunta = OIKEA Then // Jos zero katsoo väärään suuntaan, vaihdetaan suunta
PositionObject zero_vasen, ObjectX(zero_oikea), ObjectY(zero_oikea) // Asetetaan objekti oikeaan kohtaan
ShowObject zero_oikea, OFF
ShowObject zero_vasen, ON
suunta = VASEN
EndIf
waypoint_x = ObjectX(zero_vasen) - TileWidth // Asetetaan waypointin koordinaatit. Zeron pitää tässä tapauksessa liikkuta vasemmalle
waypoint_y = ObjectY(zero_vasen) // eli x-koordinaatin pitää muuttua tilen leveyden verran ja y-koordinaatin pitää pysyä samana
PlayObject zero_vasen, 0, 13, AnimaationNopeus*(64/TileWidth) // Pyöritetään animaatio
ElseIf KeyHit(cbKeyRight) Then // Tehdään kaikki sama toiseen suuntaan
liiku = OIKEA
If suunta = VASEN Then
PositionObject zero_oikea, ObjectX(zero_vasen), ObjectY(zero_vasen)
ShowObject zero_vasen, OFF
ShowObject zero_oikea, ON
suunta = OIKEA
EndIf
waypoint_x = ObjectX(zero_oikea) + TileWidth
waypoint_y = ObjectY(zero_oikea)
PlayObject zero_oikea, 0, 13, AnimaationNopeus*(64/TileWidth)
EndIf
EndIf
If liiku <> IDLE Then // Jos liikutaan johonkin suuntaan
If liiku = VASEN Then
If Distance(ObjectX(zero_vasen), ObjectY(zero_vasen), waypoint_x, waypoint_y) > 2 Then // Jos ei olla tarpeeksi lähellä waypointia, liikuta zeroa
TranslateObject zero_vasen , -LiikkumisNopeus, 0 // Tässä tapauksessa liikutaan vasemmalle eli siksi miinus LiikkumisNopeuden edessä.
Else // Jos ollaan tarpeeksi lähellä, asetetaan objektin koordinaateiksi waypointin koordinaatit
liiku = IDLE
PositionObject zero_vasen, waypoint_x, waypoint_y
EndIf
Else // Kaikki sama toiseen suuntaan oikealle liikkuessa
If Distance(ObjectX(zero_oikea), ObjectY(zero_oikea), waypoint_x, waypoint_y) > 2 Then
TranslateObject zero_oikea , LiikkumisNopeus, 0
Else
liiku = IDLE
PositionObject zero_oikea, waypoint_x, waypoint_y
EndIf
EndIf
EndIf
// Piirretään ruudukko (kuvastaa karttaa)
For i=1 To ScreenWidth()/TileWidth
Line i*TileWidth, 0, i*TileWidth, ScreenHeight()
Next i
For i=1 To ScreenWidth()/TileHeight
Line 0, i*TileHeight, ScreenWidth(), i*TileHeight
Next i
// Tulostetaan koordinaatit
If suunta = VASEN Then
Text 0,0, "X: "+ObjectX(zero_vasen)
Text 0,15, "Y: "+ObjectY(zero_vasen)
Else
Text 0,0, "X: "+ObjectX(zero_oikea)
Text 0,15, "Y: "+ObjectY(zero_oikea)
EndIf
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2011)
Miten tehdään sellainen systeemi, että kun luoti osuu karttaan, osumatile poistetaan? Tässä on mitä olen saanut tehtyä. Se toimii joskus, mutta on riippuvainen osumakohdasta ja -kulmasta. Lisäksi jotkut tilet eivät tunnu häviävän ollenkaan.
ja tässä funktiot:
Code: Select all
luodit:
For a.AMMUS = Each AMMUS
MoveObject a\obj,10
TranslateObject a\obj,0,-a\wgt
If GetMap(2,ObjectX(a\obj),ObjectY(a\obj))>0
Select GetMap(0,ObjectX(a\obj),ObjectY(a\obj))
Case 95,96,105,106,107
MoveObject a\obj,7.5
EditMap kartta,0,w2tx(10*RoundUp(ObjectX(a\obj)/10)-5),w2ty(10*RoundUp(ObjectY(a\obj)/10)-5),0
EditMap kartta,2,w2tx(10*RoundUp(ObjectX(a\obj)/10)-5),w2ty(10*RoundUp(ObjectY(a\obj)/10)-5),0
DeleteObject a\obj
Delete a
Default
DeleteObject a\obj
Delete a
End Select
EndIf
Next a
Return
Code: Select all
Function w2tX(tx)
Return (tx / 20 + MapWidth() / 2)
EndFunction
Function w2tY(ty)
Return -(ty / 20 - MapHeight() / 2)
EndFunction
Re: Tyhmät kysymykset (I/2011)
Miksi käytät Select Case -rakennetta, jos kuitenkin haluat poistaa tilen riippumatta siitä, mihin tileen törmätään? Olettaen, että olet laittanut törmäyksen vain sellaisiin tileihin, joihin piirretään jotain, voisit tehdä jopa näin:
Tuossahan sinä myös nollaat törmäyskerroksen datan, joten koodin pitäisi toimia oikein. Tosin nuo muunnos kaavat kyllä hieman ihmetyttävät. Mikä on tilen korkeus ja mikä leveys? 20 ja 20? Käyttämällä vakioita koodista saisi helpommin luettavaa. Eli esim.
Mutta voisitko hieman avata näitä rivejä:
Mikä on 10, mikä on 5?
Code: Select all
If GetMap(2,ObjectX(a\obj),ObjectY(a\obj))>0
'MoveObject a\obj,7.5 (Miksi muuten liikutat ammusta vielä täälläkin? Sitähän on liikutettu jo aikaisemmin ja tämähän muuttaa niitä koordinaatteja, joita seuraavilla riveillä käytät.)
EditMap kartta,0,w2tx(10*RoundUp(ObjectX(a\obj)/10)-5),w2ty(10*RoundUp(ObjectY(a\obj)/10)-5),0
EditMap kartta,2,w2tx(10*RoundUp(ObjectX(a\obj)/10)-5),w2ty(10*RoundUp(ObjectY(a\obj)/10)-5),0
DeleteObject a\obj
Delete a
EndIf
Code: Select all
Const TileWidth = 20
Const TileHeight = 20
Function w2tX(tx)
Return (tx / TileWidth + MapWidth() / 2)
EndFunction
Function w2tY(ty)
Return -(ty / TileHeight - MapHeight() / 2)
EndFunction
Code: Select all
EditMap kartta,0,w2tx(10*RoundUp(ObjectX(a\obj)/10)-5),w2ty(10*RoundUp(ObjectY(a\obj)/10)-5),0
EditMap kartta,2,w2tx(10*RoundUp(ObjectX(a\obj)/10)-5),w2ty(10*RoundUp(ObjectY(a\obj)/10)-5),0
Re: Tyhmät kysymykset (I/2011)
Joo, tuohon alimpaan kohtaan unohtui yksi testijuttu, näin toimii paremmin, muttei aina kuitenkaan.
Tilen koko on 20*20 ja se tosiaan olisi parempi vakioilla. Ja case-rakenne siksi, että siihen tulee muitakin vaihtoehtoja, kunhan saan tämän jutun toimimaan. Vika tuntuisi olevan muunnoksessa, koska muuten koodi toimii.
Code: Select all
EditMap kartta,0,w2tx(ObjectX(a\obj)),w2ty(ObjectY(a\obj)),0
EditMap kartta,2,w2tx(ObjectX(a\obj)),w2ty(ObjectY(a\obj)),0
Re: Tyhmät kysymykset (I/2011)
Onko tilekarttasi korkeus ja leveys jaollisia kahdella? Esim. CB:n mukana tulevan cdm2 kartan leveys on 41 tileä, jolloin MapWidth()/2 antaa tulokseksi 20, mikä johtaa virheelliseen toimintaan. Tein pienen testiohjelman
Ratkaisu on siis pakottaa kyseisen jakolaskun tulos liukuluvuksi, laskea kaikki yhteen ja pyöristää vasta sen jälkeen.
Code: Select all
SCREEN 800,600
Const TileWidth = 32
Const TileHeight = 32
map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
guy= LoadObject("Media\soldier.bmp",72)
Repeat
If LeftKey() Then TurnObject guy, 4
If RightKey() Then TurnObject guy, -4
If UpKey() Then MoveObject guy, 2
If DownKey() Then MoveObject guy, -2
If GetMap(0, ObjectX(guy), ObjectY(guy)) > 0 Then
// Kokeile kommentoida seuraava rivi ja poistaa kommentointi sitä seuraavalta riviltä niin huomaat eron
EditMap map, 0, RoundUp(ObjectX(guy)/TileWidth+Float(MapWidth())/2), RoundUp(-ObjectY(guy)/TileHeight+Float(MapHeight())/2), 0
'EditMap map, 0, RoundUp(ObjectX(guy)/TileWidth)+MapWidth()/2, RoundUp(-ObjectY(guy)/TileHeight)+MapHeight()/2, 0
EndIf
DrawGame
Circle ObjectX(guy)+ScreenWidth()/2, -ObjectY(guy)+ScreenHeight()/2, 3
Text 0,0, "GetMap(0, ObjectX(guy), ObjectY(guy)): "+GetMap(0, ObjectX(guy), ObjectY(guy))
Text 0,15, "MapWidth(): "+MapWidth()
Text 0,30, "MapWidth()/2: "+MapWidth()/2
Text 0, 45, "MapHeight(): "+MapHeight()
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2011)
kartan koko on 200*40, joten siinä ongelma ei ole. Erään jännän jutun olen huomannut, ongelmaa ei ole maailman nollakoordinaatin ylävasemmalla.
Re: Tyhmät kysymykset (I/2011)
Tämä toimii ainakin itselläni:
Code: Select all
SCREEN 800,600
Type Bullets
Field object
EndType
Const TileWidth = 32
Const TileHeight = 32
map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
guy= LoadObject("Media\soldier.bmp",72)
bullet = LoadObject("Media\bullet.bmp")
ShowObject bullet, OFF
Repeat
If LeftKey() Then TurnObject guy, 4
If RightKey() Then TurnObject guy, -4
If UpKey() Then MoveObject guy, 2
If DownKey() Then MoveObject guy, -2
If KeyHit(cbKeySpace) Then
newBullet.Bullets = New(Bullets)
newBullet\object = CloneObject(bullet)
CloneObjectPosition newBullet\object, guy
CloneObjectOrientation newBullet\object, guy
MoveObject newBullet\object, 24
EndIf
For iBullet.bullets = Each Bullets
MoveObject iBullet\object, 5
If GetMap(0, ObjectX(iBullet\object), ObjectY(iBullet\object)) > 0 Then
EditMap map, 0, w2tx(ObjectX(iBullet\object)), w2tY(ObjectY(iBullet\object)), 0
DeleteObject iBullet\object
Delete iBullet
EndIf
Next iBullet
DrawScreen
Forever
Function w2tX(tx#)
Return RoundUp((tx# / TileWidth + Float(MapWidth()) / 2))
EndFunction
Function w2tY(ty#)
Return RoundUp(-(ty# / TileHeight - Float(MapHeight()) / 2))
EndFunction
Re: Tyhmät kysymykset (I/2011)
Niin toimii minullakin. Kiitokset avusta!Dimple wrote:Tämä toimii ainakin itselläni:Code: Select all
SCREEN 800,600 Type Bullets Field object EndType Const TileWidth = 32 Const TileHeight = 32 map= LoadMap("Media\cdm2.til","Media\tileset.bmp") guy= LoadObject("Media\soldier.bmp",72) bullet = LoadObject("Media\bullet.bmp") ShowObject bullet, OFF Repeat If LeftKey() Then TurnObject guy, 4 If RightKey() Then TurnObject guy, -4 If UpKey() Then MoveObject guy, 2 If DownKey() Then MoveObject guy, -2 If KeyHit(cbKeySpace) Then newBullet.Bullets = New(Bullets) newBullet\object = CloneObject(bullet) CloneObjectPosition newBullet\object, guy CloneObjectOrientation newBullet\object, guy MoveObject newBullet\object, 24 EndIf For iBullet.bullets = Each Bullets MoveObject iBullet\object, 5 If GetMap(0, ObjectX(iBullet\object), ObjectY(iBullet\object)) > 0 Then EditMap map, 0, w2tx(ObjectX(iBullet\object)), w2tY(ObjectY(iBullet\object)), 0 DeleteObject iBullet\object Delete iBullet EndIf Next iBullet DrawScreen Forever Function w2tX(tx#) Return RoundUp((tx# / TileWidth + Float(MapWidth()) / 2)) EndFunction Function w2tY(ty#) Return RoundUp(-(ty# / TileHeight - Float(MapHeight()) / 2)) EndFunction
Re: Tyhmät kysymykset (I/2011)
Anteeksi tuplat, mutta oliko joku tehnyt timer-pohjaisen framelimitin? Muistan nähneeni sellaisen jossain, mutta pikaisella haeskelulla ei löytynyt. Cb:n framelimitti tuppaa laskemaan fps:ää, esim. fps ~50 > framelimit 40 > fps ~35.
Re: Tyhmät kysymykset (I/2011)
CBSDK:ssa ainakin on yksi tapa, jolla liikkumisen voi tehdä FPS-riippumattomasti. Tällöin ei tarvita mitään framelimittejä.Kille wrote:Anteeksi tuplat, mutta oliko joku tehnyt timer-pohjaisen framelimitin? Muistan nähneeni sellaisen jossain, mutta pikaisella haeskelulla ei löytynyt. Cb:n framelimitti tuppaa laskemaan fps:ää, esim. fps ~50 > framelimit 40 > fps ~35.
Myös NetMatchissa on käytössä FPS-riippumaton liike:
Liikkumisen koodi ja siinä käytettävä funktio.
Tätä funktiota täytyy kutsua aina kerran pääsilmukan alussa. Tämä yhdistelmä vaatii kaksi globaalia, g_frameTime# ja g_tmpTime.
Huomaa myös kääntymiseen tarkoitettu DgrPerSec-funktio.
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/2011)
Idea yksinkertainen, käytännössä hankala. En vain keksi miten estää koodia kuuntelemasta pelaajan komentoja. Pitää varmaan katsoa joku arki-ilta, kun ei todellakaan pitäisiJATothrim wrote: Tarvitaan lisää koodia. Puran ajatuksesti nyt näin kokeneena koodarina osiin:
#1 Mitä meidän pitää tehdä, kun pelaaja sörkii liikkumis näpäinten kanssa? -Liikuttaa pelaajaa.
#2 Kuinka meidän pitää liikuttaa pelaajaa? -Pykälittäin, 16x16 ruudukossa. Pelaaja on aina keskellä tileä, kun emme liiku.
#3 Kuinka liikumme tilestä toiseen? -Kun pelaaja painaa näppäintä, aloitamme usean framen kestävän animaation, jonka aikana pelaaja siirretään toiseen tileen. Animaation aikana emme ota huomioon liikenäppäimiä, eli pelaaja ei voi vaikuttaa pelihahmon liikeeseen animaation aikana. Kun animaatio päättyy, pelaaja voi liikuttaa hahmoa jälleen.
Huomaa, miten paljon yksityiskohtia paljastuu näinkin "simppelistä" pelimekaniikasta.
Paljastan muutaman muuttujan joita ainakin tarvitaan:
-animaatio_kaynnissa (liikuuko pelihahmo???)
-valittu_suunta (esim. 1-4. arvo määräytyy sen perusteella, mihin suuntaan olemme liikkumassa animaation aikana.)
kiitos tästä, leikin tuon kanssa ja katson, josko pystyisi lyhentämään hiukan... lisäksi kannattaa huomata, etteivät 8bit hahmot ole 16x16 kokoisia, vaan 16x24. tämä aiheuttaa hieman ongelmia, mutta täytyy tosissaan leikkiä kun ei pitäisi.Dimple wrote:Väsäsinpäs tässä jonkinlaisen esimerkin. En ikävä kyllä keksinyt, millä kaavalla animaatio-nopeuden pystyisi laskemaan joka kerta oikein riippumatta FPS:stä ja liikkumisnopeudesta eli joudut ns. kovakoodaamaan animaation nopeuden jos jollain muulla ei ole ratkaisua siihen (ongelma liittyy siis PlayObjectiin, ilman objekteja se olisi paljon helpompaa). Idea tässä on aika samanlainen, mitä JATothrim jo sanoikin. Tilen koko on oletuksen 64x64 (koska Zero on aika iso), mutta sitä voi pienentää muuttamalla vakioita TileWidth ja TileHeight. Kaiken pitäisi pyöriä oikein ainakin 16x16 tilekokoon asti (ainakin tasakokoisilla tileillä).
Code: Select all
*SNIP*
Re: Tyhmät kysymykset (I/2011)
Jos meinaat tehdä tileistä suorakulmaisia neliöiden sijasta, niin sen ei käsittääkseni pitäisi vaikuttaa muuhun kuin siihen, että tarvitset vaaka- ja pystysuunnille omat animaationNopeus-vakiot. Kaiken muu (ainakin pitäisi) skaalautua automaattisesti.