Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
No kameran kääntämiseen tarvitset qwaterniota (algoritmiä) se on vähän hankalempi, katsoppa koodaajan 3d tuto.
Solar Eclipse
We're in a simulation, and God is trying to debug us.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Tyhmät kysymykset (I/2010)
Pelkkään yhden akselin ympäri pyöritykseen ei tarvita vielä sen kummempaa, muutama sini- ja kosinilause hoitaa homman tyylikkäästi. Yleensä halutaan vähintään kaksi, jolloin systeemi vaatii muutaman sinin ja kosinin lisää. Jos halutaan kolmaskin ulottuvuus mukaan niin homma menee hieman monimutkaisemmaksi. Silloin todellakin tarvitaan kvaternioita, joiden kanssa työskentely on vähemmän mukavaa. Yleensä kolmas ulottuvuus ei kuitenkaan ole läheskään välttämätön - riippuu siis ihan käyttötarkoituksestasi, miten vaikea kamera sinun kannattaa toteuttaa :>
Re: Tyhmät kysymykset (I/2010)
Kiitoksia auttaneille
Vielä kun joku osaisi neuvoa hyvän C++ -kirjaston millä saisi mahd. hyvin piirrettyä näytölle kuten cb -piirtokomennoilla, olisin hyvin tyytyväinen
Vielä kun joku osaisi neuvoa hyvän C++ -kirjaston millä saisi mahd. hyvin piirrettyä näytölle kuten cb -piirtokomennoilla, olisin hyvin tyytyväinen
- Sami The Great
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 4:15 pm
- Contact:
Re: Tyhmät kysymykset (I/2010)
Jos 2D grafiikkaa haluat piirellä, niin ehdottaisin sinulle SDL:ä (C kirjasto, mutta toimii c++:ssa) ja siihen SDL_gfx, joka sisältää hyviä piirtofunktioita. Jos haluat, että kirjastossa on myös monipuoliset 3D ominaisuudet, niin sitten suosittelen joko Irrlichtiä tai OGREa, joista Irrlicht on ehkä enempi aloittelijaystävällisempi, mutta OGREssa on paljon enemmän ominaisuuksia ja muutenkin mielestäni parempi.DJ-Filbe wrote:Kiitoksia auttaneille
Vielä kun joku osaisi neuvoa hyvän C++ -kirjaston millä saisi mahd. hyvin piirrettyä näytölle kuten cb -piirtokomennoilla, olisin hyvin tyytyväinen
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
CoolBasickin käyttäjä vuodesta 2004.
Re: Tyhmät kysymykset (I/2010)
Jotain on mennyt pieleen. Olen koittanut laittaa objekteille elämän ja määritellyt miten ja kuinka paljon elämä vähenee. Kuitenkin kääntäjä herjaa asioista jotka esimerkkien ja tietojeni mukaan pitäisi olla oikein. Mikä on siis vikana koodissa? Kiitos jo etukäteen!
Code: Select all
SCREEN 900,900
SetWindow "Battle game"
Text 100,100, "Sotilas: liikkuu: nuolinäppäimistä ja ampuu: M"
Text 100,150, "Punainen mies: liikkuu: W,A,S,D ja ampuu: C"
Text 100,200, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
Wait 6000
ClearText
Type AMMUS
Field obj
End Type
FrameLimit 40
ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame\Media"
kartta = LoadMap("cdm2.til","tileset.bmp")
PlayObject kartta,0,0,1
ukko=LoadObject("soldier.bmp", 100)
ukkeli=LoadObject("guy.bmp", 100)
pati=LoadObject("bullet.bmp")
ShowObject pati,OFF
'Pyöritä ukot alkuasentoon
RotateObject ukko,0
RotateObject ukkeli,180
PositionObject ukko,-150,100
PositionObject ukkeli,150,-100
SetupCollision ukko,ukkeli,2,2,2
SetupCollision ukkeli,ukko,2,2,2
'pati kulkee ukon läpi vaikka määritykset on
SetupCollision ukko,pati,2,2,2
Repeat
If LeftKey() Then TurnObject ukko,8
If RightKey() Then TurnObject ukko,-8
If UpKey() Then MoveObject ukko,8
If DownKey() Then MoveObject ukko,-8
If KeyDown(cbKeyA) Then TurnObject ukkeli,8
If KeyDown(cbKeyD) Then TurnObject ukkeli,-8
If KeyDown(cbKeyW) Then MoveObject ukkeli,8
If KeyDown(cbKeyS) Then MoveObject ukkeli,-8
If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
ObjectInteger ukko,100
ObjectInteger ukkeli,100
'Tässä on ehkä joku virhe... En tajua mikä
If
ObjectsOverlap (ukko,pati)
Then
ObjectInteger ukko,ObjectInteger(ukko) -2
EndIf
If KeyDown(cbKeyM) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukko
CloneObjectOrientation luoti\obj,ukko
reload=5
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If ObjectX(luoti\obj)<-430 Or ObjectX(luoti\obj)>430 Or ObjectY(luoti\obj)<-430 Or ObjectY(luoti\obj)>430 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
If KeyDown(cbKeyC) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukkeli
CloneObjectOrientation luoti\obj,ukkeli
reload=5
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If ObjectX(luoti\obj)<-430 Or ObjectX(luoti\obj)>430 Or ObjectY(luoti\obj)<-430 Or ObjectY(luoti\obj)>430 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
DrawScreen
Until EscapeKey()
Last edited by Peltsi on Tue Nov 02, 2010 8:40 am, edited 1 time in total.
Re: Tyhmät kysymykset (I/2010)
If-ehtolause pitäisi kirjoittaa näin:
Koodisi tosin yrittää tarkistaa, onko objekti "ukko" kosketuksissa objectin "pati" kanssa (joka siis on master-objekti), se ei siis tarkista tyypin AMMUS jäseniä ollenkaan. Ehtolause pitäisi siis laittaa jonkin silmukan sisälle, jossa läpikäydään kaikki ammukset. Lisäksi asetat pääsilmukassa joka kerta elämäksi 100, eli elämä ei ehdi vähentyä ollenkaan, jos siis tarkoituksesi oli että se vähentyy joka kerta kun amuus osuu ukkoon. Elämä pitäisi siis asettaa ennen pääsilmukkaa. Tässä esimerkki korjatusta koodista:
Code: Select all
If ObjectsOverlap (ukko,pati) Then
ObjectInteger ukko,ObjectInteger(ukko) -2
EndIf
Code: Select all
SCREEN 900,900
SetWindow "Battle game"
Text 100,100, "Sotilas: liikkuu: nuolinäppäimistä ja ampuu: M"
Text 100,150, "Punainen mies: liikkuu: W,A,S,D ja ampuu: C"
Text 100,200, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
Wait 6000
ClearText
Type AMMUS
Field obj
End Type
FrameLimit 40
ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame\Media"
kartta = LoadMap("cdm2.til","tileset.bmp")
PlayObject kartta,0,0,1
ukko=LoadObject("soldier.bmp", 100)
ukkeli=LoadObject("guy.bmp", 100)
pati=LoadObject("bullet.bmp")
ShowObject pati,OFF
'Pyöritä ukot alkuasentoon
RotateObject ukko,0
RotateObject ukkeli,180
PositionObject ukko,-150,100
PositionObject ukkeli,150,-100
SetupCollision ukko,ukkeli,2,2,2
SetupCollision ukkeli,ukko,2,2,2
'pati kulkee ukon läpi vaikka määritykset on
SetupCollision ukko,pati,2,2,2
ObjectInteger ukko,100
ObjectInteger ukkeli,100
Repeat
If LeftKey() Then TurnObject ukko,8
If RightKey() Then TurnObject ukko,-8
If UpKey() Then MoveObject ukko,8
If DownKey() Then MoveObject ukko,-8
If KeyDown(cbKeyA) Then TurnObject ukkeli,8
If KeyDown(cbKeyD) Then TurnObject ukkeli,-8
If KeyDown(cbKeyW) Then MoveObject ukkeli,8
If KeyDown(cbKeyS) Then MoveObject ukkeli,-8
If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
If ObjectsOverlap (ukko,pati) Then
ObjectInteger ukko,ObjectInteger(ukko) -2
EndIf
If KeyDown(cbKeyM) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukko
CloneObjectOrientation luoti\obj,ukko
reload=5
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
If ObjectsOverlap (ukko,luoti\obj) Then
ObjectInteger ukko,ObjectInteger(ukko) -2
EndIf
MoveObject luoti\obj,6
If ObjectX(luoti\obj)<-430 Or ObjectX(luoti\obj)>430 Or ObjectY(luoti\obj)<-430 Or ObjectY(luoti\obj)>430 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
If KeyDown(cbKeyC) And reload=0 Then
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukkeli
CloneObjectOrientation luoti\obj,ukkeli
reload=5
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
MoveObject luoti\obj,6
If ObjectX(luoti\obj)<-430 Or ObjectX(luoti\obj)>430 Or ObjectY(luoti\obj)<-430 Or ObjectY(luoti\obj)>430 Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
DrawScreen
Until EscapeKey()
Re: Tyhmät kysymykset (I/2010)
Kiitokset Guest:ille, koodi toimii hyvin!
Mutta kumminkin, asiani koskee Tilesteriä.
Olen yrittänyt tehdä tilekarttoja (onnistunutkin), mutta tilekarttojen lataaminen peliin on tuottanut ongelmia ("Can't load map..." ilmoitus). Olen jopa kokeillut "Kartat" esimerkistä kopioida koodin johon olen vaihtanut tiedostonimet (tämä sen takia että mikään ei olisi voinut mennä vikaan). Muut kuvat ja objektit toimivat hyvin, mutta jostain syystä omat tilesetit eivät toimi (ei pitäisi johtua väärästä tallennus kansiosta).
Mutta kumminkin, asiani koskee Tilesteriä.
Olen yrittänyt tehdä tilekarttoja (onnistunutkin), mutta tilekarttojen lataaminen peliin on tuottanut ongelmia ("Can't load map..." ilmoitus). Olen jopa kokeillut "Kartat" esimerkistä kopioida koodin johon olen vaihtanut tiedostonimet (tämä sen takia että mikään ei olisi voinut mennä vikaan). Muut kuvat ja objektit toimivat hyvin, mutta jostain syystä omat tilesetit eivät toimi (ei pitäisi johtua väärästä tallennus kansiosta).
Re: Tyhmät kysymykset (I/2010)
Tilesterillä tilekartat pitää tallentaa 1.3 muodossa, muuten ne eivät toimi.Peltsi wrote:Kiitokset Guest:ille, koodi toimii hyvin!
Mutta kumminkin, asiani koskee Tilesteriä.
Olen yrittänyt tehdä tilekarttoja (onnistunutkin), mutta tilekarttojen lataaminen peliin on tuottanut ongelmia ("Can't load map..." ilmoitus). Olen jopa kokeillut "Kartat" esimerkistä kopioida koodin johon olen vaihtanut tiedostonimet (tämä sen takia että mikään ei olisi voinut mennä vikaan). Muut kuvat ja objektit toimivat hyvin, mutta jostain syystä omat tilesetit eivät toimi (ei pitäisi johtua väärästä tallennus kansiosta).
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)
Mav:ia heittää... Onko vika Tilesterissä?VesQ wrote:Tilesterillä tilekartat pitää tallentaa 1.3 muodossa, muuten ne eivät toimi.Peltsi wrote:Kiitokset Guest:ille, koodi toimii hyvin!
Mutta kumminkin, asiani koskee Tilesteriä.
Olen yrittänyt tehdä tilekarttoja (onnistunutkin), mutta tilekarttojen lataaminen peliin on tuottanut ongelmia ("Can't load map..." ilmoitus). Olen jopa kokeillut "Kartat" esimerkistä kopioida koodin johon olen vaihtanut tiedostonimet (tämä sen takia että mikään ei olisi voinut mennä vikaan). Muut kuvat ja objektit toimivat hyvin, mutta jostain syystä omat tilesetit eivät toimi (ei pitäisi johtua väärästä tallennus kansiosta).
Re: Tyhmät kysymykset (I/2010)
Voithan kokeilla A Stigmatoria tai TileGeniä, etenkin kun ne muutenkin ovat parempia ohjelmia kuin Tilester.Peltsi wrote:Mav:ia heittää... Onko vika Tilesterissä?VesQ wrote:Tilesterillä tilekartat pitää tallentaa 1.3 muodossa, muuten ne eivät toimi.Peltsi wrote:Kiitokset Guest:ille, koodi toimii hyvin!
Mutta kumminkin, asiani koskee Tilesteriä.
Olen yrittänyt tehdä tilekarttoja (onnistunutkin), mutta tilekarttojen lataaminen peliin on tuottanut ongelmia ("Can't load map..." ilmoitus). Olen jopa kokeillut "Kartat" esimerkistä kopioida koodin johon olen vaihtanut tiedostonimet (tämä sen takia että mikään ei olisi voinut mennä vikaan). Muut kuvat ja objektit toimivat hyvin, mutta jostain syystä omat tilesetit eivät toimi (ei pitäisi johtua väärästä tallennus kansiosta).
Re: Tyhmät kysymykset (I/2010)
ja olethan muistanut tallentaa kartat oikeaan kansioon?
Re: Tyhmät kysymykset (I/2010)
Juu, ja olen myös käyttänyt ChDir komentoa määrittämään oletushakemiston. Pitää kai kokeilla noita muita tilesetti softia. Kiitoksia avusta!Kille wrote:ja olethan muistanut tallentaa kartat oikeaan kansioon?
Re: Tyhmät kysymykset (I/2010)
chdir ei toimi kunnolla vistassa eikä seiskassa eikä aina xp. En suosittele sen käyttöä. Ongelma voi olla siinä.
Re: Tyhmät kysymykset (I/2010)
Miksi MAV tulee heti kun peli pääsee silmukkaan? Olen yrittänyt laittaa ammukset tuhoutumaan kun ne osuvat tilekartan hit-kerrokseen, ja siitäkös peli ei tykännyt.
Code: Select all
SCREEN 900,900
SetWindow "Battle game (Ver: kehitys)"
ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1."
Text 100,250, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
Text 100,300, "Paina pelin aikana H päästäksesi ohjeeseen"
Type AMMUS
Field obj
End Type
Type AMPU
Field amm
End Type
FrameLimit 40
Wait 6000
ClearText
kartta = LoadMap("kartta.til","tileset.bmp")
PlayObject kartta,0,0,1
ukko=LoadObject("soldier.bmp", 360)
ukkeli=LoadObject("soldier2.bmp", 360)
pati=LoadObject("panos.bmp")
ShowObject pati,OFF
paukku=LoadObject ("panos.bmp")
ShowObject paukku,OFF
Dim ykm As String
ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
Dim kam As String
Dim linechange As String
linechange=Chr(13)+Chr(10)
kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
ykm=ykm+linechange
'Pyöritä ukot alkuasentoon
RotateObject ukko,0
RotateObject ukkeli,180
PositionObject ukko,-100,100
PositionObject ukkeli,100,-100
'Törmäykset
SetupCollision ukko,ukkeli,2,2,2
SetupCollision ukkeli,ukko,2,2,2
SetupCollision ukko,kartta,1,4,2
SetupCollision ukkeli,kartta,1,4,2
'ELMÄMÄT
ObjectInteger ukko,100
ObjectInteger ukkeli,100
Repeat
Color cbwhite
Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
Text 420,860,FPS()
Text 10,880,"Paina H päästäksesi ohjeeseen"
Color cbred
Text 100,100,FPS()
If KeyDown(cbKeyH) Then
Execute "BattleGameOhje.txt"
EndIf
If LeftKey() Then TurnObject ukko,4
If RightKey() Then TurnObject ukko,-4
If UpKey() Then MoveObject ukko,5
If DownKey() Then MoveObject ukko,-5
If KeyDown(cbKeyA) Then TurnObject ukkeli,4
If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
If KeyDown(cbKeyW) Then MoveObject ukkeli,5
If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
'VIHREÄ
If KeyDown(cbKeyM) And reload=0 Then
PlaySound "Machine Gun 1.wav",100
luot.AMPU = New(AMPU)
luot\amm=CloneObject(paukku)
CloneObjectPosition luot\amm,ukko
CloneObjectOrientation luot\amm,ukko
reload=5 'Luodin lataus nopeus
EndIf
If reload>0 Then reload=reload-1
For luot.AMPU = Each AMPU
MoveObject luot\amm,50 'Luodin lento nopeus
If ObjectsOverlap (ukkeli,luot\amm) Then
ObjectInteger ukkeli,ObjectInteger(ukkeli) -1 'Luodin hittaus
DeleteObject luot\amm
Delete luot
EndIf
Next luot
'Elämä 0
If ObjectInteger (ukkeli) = 0 Then
PlaySound "screm1.wav",100
MakeError kam
End
EndIf
'PUNAINEN
If KeyDown(cbKeyC) And reload=0 Then
PlaySound "Machine Gun 1.wav",100
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukkeli
CloneObjectOrientation luoti\obj,ukkeli
reload=5 'Luodin lataus nopeus
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
If ObjectsOverlap (ukko,luoti\obj) Then
ObjectInteger ukko,ObjectInteger(ukko) -1 'Luodin hittaus
EndIf
MoveObject luoti\obj,50 'Luodin lento nopeus
If ObjectsOverlap (ukko,luoti\obj) Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
'MAV tulee jos lisätään nämä määritykset ja if:in
SetupCollision luoti\obj,kartta,2,4,2
osuu = CountCollisions (luoti\obj)
If osuu Then
DeleteObject luoti\obj
Delete luoti
EndIf
If ObjectInteger (ukko) = 0 Then
PlaySound "screm1.wav",100
MakeError ykm
End
EndIf
DrawScreen
Until EscapeKey()
Re: Tyhmät kysymykset (I/2010)
Toimiikos teillä tämmönen?
X näyttää nollaa ja x2 näyttää taas fontin korkeuden 49
Eli miksi TextWidth ei toimi tuollalailla, kun funktioon sitä tarvitsisin.
Code: Select all
comic=LoadFont("Comic Sans MS",50)
teksti$="lol"
x=TextWidth("")+teksti$
x2=TextHeight("")+teksti$
Eli miksi TextWidth ei toimi tuollalailla, kun funktioon sitä tarvitsisin.
Re: Tyhmät kysymykset (I/2010)
Se kertoo tekstin leveyden laitappa noiden "" väliin tekstiä niin se näyttää jotain muuta kun nollaa.Kasp3r wrote:Toimiikos teillä tämmönen?
X näyttää nollaa ja x2 näyttää taas fontin korkeuden 49Code: Select all
comic=LoadFont("Comic Sans MS",50) teksti$="lol" x=TextWidth("")+teksti$ x2=TextHeight("")+teksti$
Eli miksi TextWidth ei toimi tuollalailla, kun funktioon sitä tarvitsisin.
Re: Tyhmät kysymykset (I/2010)
TextWidth("") on aina 0, koska olemattomalla tekstillä ei ole tietenkään leveyttä. Int(merkkijono$) on myös aina 0. Muuttujien välisiä yhteenlaskuja ei voida suorittaa ellei niitä käännetä ensin samaan muotoon, eli siis käytännössä TextWidth("")+teksti$ on sama kuin kirjoittaisit 0+0.Kasp3r wrote:Toimiikos teillä tämmönen?
X näyttää nollaa ja x2 näyttää taas fontin korkeuden 49Code: Select all
comic=LoadFont("Comic Sans MS",50) teksti$="lol" x=TextWidth("")+teksti$ x2=TextHeight("")+teksti$
Eli miksi TextWidth ei toimi tuollalailla, kun funktioon sitä tarvitsisin.
Mitä sinun olisi pitänyt kirjoittaa, jotta oikeasti koodi laskisi tekstin pituuden, näyttää tältä:
Code: Select all
TextWidth(teksti$) 'tai TextWidth(""+teksti$) jos nyt ihan välttämättä haluaa suorittaa yhden turhan laskutoimituksen.
Re: Tyhmät kysymykset (I/2010)
Kiitoksia vastauksista.
Tuollahan se toimikin joo kiitoksia.
Ajattelin itsekkin tuota että koska siellä on tyhjää ei se mitään voi näytääkkään, mutta koska tuo TextHeight kuitenkin toimi niin menin ymmälleni.
Tuollahan se toimikin joo kiitoksia.
Code: Select all
TextWidth(teksti$)
Re: Tyhmät kysymykset (I/2010)
Ohjelmani MAV:aa, vika lienee luotien törmäysmäärityksistä karttaan... Voisiko joku vilkaista koodia ja ehdottaa ratkaisua? Kiitos
Code: Select all
SCREEN 900,900
SetWindow "Battle game (Ver: kehitys)"
ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media"
Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M"
Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C"
Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1."
Text 100,250, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!"
Text 100,300, "Paina pelin aikana H päästäksesi ohjeeseen"
Type AMMUS
Field obj
End Type
Type AMPU
Field amm
End Type
FrameLimit 40
Wait 6000
ClearText
kartta = LoadMap("kartta.til","tileset.bmp")
PlayObject kartta,0,0,1
ukko=LoadObject("soldier.bmp", 360)
ukkeli=LoadObject("soldier2.bmp", 360)
pati=LoadObject("panos.bmp")
ShowObject pati,OFF
paukku=LoadObject ("panos.bmp")
ShowObject paukku,OFF
Dim ykm As String
ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi."
Dim kam As String
Dim linechange As String
linechange=Chr(13)+Chr(10)
kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi."
ykm=ykm+linechange
'Pyöritä ukot alkuasentoon
RotateObject ukko,0
RotateObject ukkeli,180
PositionObject ukko,-100,100
PositionObject ukkeli,100,-100
'Törmäykset
SetupCollision ukko,ukkeli,2,2,2
SetupCollision ukkeli,ukko,2,2,2
SetupCollision ukko,kartta,1,4,2
SetupCollision ukkeli,kartta,1,4,2
'ELMÄMÄT
ObjectInteger ukko,100
ObjectInteger ukkeli,100
Repeat
Color cbwhite
Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):"
Text 420,860,FPS()
Text 10,880,"Paina H päästäksesi ohjeeseen"
Color cbred
Text 100,100,FPS()
If KeyDown(cbKeyH) Then
Execute "BattleGameOhje.txt"
EndIf
If LeftKey() Then TurnObject ukko,4
If RightKey() Then TurnObject ukko,-4
If UpKey() Then MoveObject ukko,5
If DownKey() Then MoveObject ukko,-5
If KeyDown(cbKeyA) Then TurnObject ukkeli,4
If KeyDown(cbKeyD) Then TurnObject ukkeli,-4
If KeyDown(cbKeyW) Then MoveObject ukkeli,5
If KeyDown(cbKeyS) Then MoveObject ukkeli,-5
If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko)
If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko)
If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430
If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430
If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli)
If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli)
If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430
If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430
'VIHREÄ
If KeyDown(cbKeyM) And reload=0 Then
PlaySound "Machine Gun 1.wav",100
luot.AMPU = New(AMPU)
luot\amm=CloneObject(paukku)
CloneObjectPosition luot\amm,ukko
CloneObjectOrientation luot\amm,ukko
reload=5 'Luodin lataus nopeus
EndIf
If reload>0 Then reload=reload-1
For luot.AMPU = Each AMPU
MoveObject luot\amm,50 'Luodin lento nopeus
If ObjectsOverlap (ukkeli,luot\amm) Then
ObjectInteger ukkeli,ObjectInteger(ukkeli) -1 'Luodin hittaus
DeleteObject luot\amm
Delete luot
EndIf
Next luot
'Elämä 0
If ObjectInteger (ukkeli) = 0 Then
PlaySound "screm1.wav",100
MakeError kam
End
EndIf
'PUNAINEN
If KeyDown(cbKeyC) And reload=0 Then
PlaySound "Machine Gun 1.wav",100
luoti.AMMUS = New(AMMUS)
luoti\obj=CloneObject(pati)
CloneObjectPosition luoti\obj,ukkeli
CloneObjectOrientation luoti\obj,ukkeli
reload=5 'Luodin lataus nopeus
EndIf
If reload>0 Then reload=reload-1
For luoti.AMMUS = Each AMMUS
If ObjectsOverlap (ukko,luoti\obj) Then
ObjectInteger ukko,ObjectInteger(ukko) -1 'Luodin hittaus
EndIf
MoveObject luoti\obj,50 'Luodin lento nopeus
If ObjectsOverlap (ukko,luoti\obj) Then
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
'!!!!!!!!!!!!!!!!!!!!!!!!
'MAV tulee jos lisätään nämä määritykset ja if:in
SetupCollision luoti\obj,kartta,2,4,2
osuu = CountCollisions (luoti\obj)
If osuu Then
DeleteObject luoti\obj
Delete luoti
EndIf
'!!!!!!!!!!!!!!!!!!!!!!!!
If ObjectInteger (ukko) = 0 Then
PlaySound "screm1.wav",100
MakeError ykm
End
EndIf
DrawScreen
Until EscapeKey()
Re: Tyhmät kysymykset (I/2010)
Virhe yläänsä löytyy helpommin jos sisentää koodin. Tää ohjelma sisäntää koodin... Ottaa huomioon kaiken =D (jopa kommentit =D)Peltsi wrote:Ohjelmani MAV:aa, vika lienee luotien törmäysmäärityksistä karttaan... Voisiko joku vilkaista koodia ja ehdottaa ratkaisua? KiitosCode: Select all
SCREEN 900,900 SetWindow "Battle game (Ver: kehitys)" ChDir "C:\Documents and Settings\Järjestelmänvalvoja\Omat tiedostot\BattleGame kehitys\Media" Text 100,100, "Vihreä sotilas: liikkuu: nuolinäppäimistä ja ampuu luodin: M" Text 100,150, "Punainen sotilas: liikkuu: W,A,S,D ja ampuu luodin: C" Text 100,200, "Kummallakin pelaajalla elämä on 100, yhdestä osumasta menettää 1." Text 100,250, "PELI ALKKAA 6 SEKUNTIN KULUTTUA!" Text 100,300, "Paina pelin aikana H päästäksesi ohjeeseen" Type AMMUS Field obj End Type Type AMPU Field amm End Type FrameLimit 40 Wait 6000 ClearText kartta = LoadMap("kartta.til","tileset.bmp") PlayObject kartta,0,0,1 ukko=LoadObject("soldier.bmp", 360) ukkeli=LoadObject("soldier2.bmp", 360) pati=LoadObject("panos.bmp") ShowObject pati,OFF paukku=LoadObject ("panos.bmp") ShowObject paukku,OFF Dim ykm As String ykm="Vihreä sotilas kuoli, Punainen sotilas voitti. Peli päättyi." Dim kam As String Dim linechange As String linechange=Chr(13)+Chr(10) kam="Punainen sotilas kuoli, Vihreä sotilas voitti. Peli päättyi." ykm=ykm+linechange 'Pyöritä ukot alkuasentoon RotateObject ukko,0 RotateObject ukkeli,180 PositionObject ukko,-100,100 PositionObject ukkeli,100,-100 'Törmäykset SetupCollision ukko,ukkeli,2,2,2 SetupCollision ukkeli,ukko,2,2,2 SetupCollision ukko,kartta,1,4,2 SetupCollision ukkeli,kartta,1,4,2 'ELMÄMÄT ObjectInteger ukko,100 ObjectInteger ukkeli,100 Repeat Color cbwhite Text 10,860,"Pelin toimintanopeus (ruudunpäivitystä sekunnissa):" Text 420,860,FPS() Text 10,880,"Paina H päästäksesi ohjeeseen" Color cbred Text 100,100,FPS() If KeyDown(cbKeyH) Then Execute "BattleGameOhje.txt" EndIf If LeftKey() Then TurnObject ukko,4 If RightKey() Then TurnObject ukko,-4 If UpKey() Then MoveObject ukko,5 If DownKey() Then MoveObject ukko,-5 If KeyDown(cbKeyA) Then TurnObject ukkeli,4 If KeyDown(cbKeyD) Then TurnObject ukkeli,-4 If KeyDown(cbKeyW) Then MoveObject ukkeli,5 If KeyDown(cbKeyS) Then MoveObject ukkeli,-5 If ObjectX(ukko)<-430 Then PositionObject ukko,-430,ObjectY(ukko) If ObjectX(ukko)>430 Then PositionObject ukko,430,ObjectY(ukko) If ObjectY(ukko)<-430 Then PositionObject ukko,ObjectX(ukko),-430 If ObjectY(ukko)>430 Then PositionObject ukko,ObjectX(ukko),430 If ObjectX(ukkeli)<-430 Then PositionObject ukkeli,-430,ObjectY(ukkeli) If ObjectX(ukkeli)>430 Then PositionObject ukkeli,430,ObjectY(ukkeli) If ObjectY(ukkeli)<-430 Then PositionObject ukkeli,ObjectX(ukkeli),-430 If ObjectY(ukkeli)>430 Then PositionObject ukkeli,ObjectX(ukkeli),430 'VIHREÄ If KeyDown(cbKeyM) And reload=0 Then PlaySound "Machine Gun 1.wav",100 luot.AMPU = New(AMPU) luot\amm=CloneObject(paukku) CloneObjectPosition luot\amm,ukko CloneObjectOrientation luot\amm,ukko reload=5 'Luodin lataus nopeus EndIf If reload>0 Then reload=reload-1 For luot.AMPU = Each AMPU MoveObject luot\amm,50 'Luodin lento nopeus If ObjectsOverlap (ukkeli,luot\amm) Then ObjectInteger ukkeli,ObjectInteger(ukkeli) -1 'Luodin hittaus DeleteObject luot\amm Delete luot EndIf Next luot 'Elämä 0 If ObjectInteger (ukkeli) = 0 Then PlaySound "screm1.wav",100 MakeError kam End EndIf 'PUNAINEN If KeyDown(cbKeyC) And reload=0 Then PlaySound "Machine Gun 1.wav",100 luoti.AMMUS = New(AMMUS) luoti\obj=CloneObject(pati) CloneObjectPosition luoti\obj,ukkeli CloneObjectOrientation luoti\obj,ukkeli reload=5 'Luodin lataus nopeus EndIf If reload>0 Then reload=reload-1 For luoti.AMMUS = Each AMMUS If ObjectsOverlap (ukko,luoti\obj) Then ObjectInteger ukko,ObjectInteger(ukko) -1 'Luodin hittaus EndIf MoveObject luoti\obj,50 'Luodin lento nopeus If ObjectsOverlap (ukko,luoti\obj) Then DeleteObject luoti\obj Delete luoti EndIf Next luoti '!!!!!!!!!!!!!!!!!!!!!!!! 'MAV tulee jos lisätään nämä määritykset ja if:in SetupCollision luoti\obj,kartta,2,4,2 osuu = CountCollisions (luoti\obj) If osuu Then DeleteObject luoti\obj Delete luoti EndIf '!!!!!!!!!!!!!!!!!!!!!!!! If ObjectInteger (ukko) = 0 Then PlaySound "screm1.wav",100 MakeError ykm End EndIf DrawScreen Until EscapeKey()
Code: Select all
Const file$ = "alkuperäinen tiedosto.cb" //älä laita file1 ja file2 samaa tai muuten koodisi hukkuu...
Const file2$ = "sisennetty.cb"
If Not Sisentäjä(file,file2) Then
Print "Tiedosto puuttui"
Else
Print "Tiedosto on sisennetty =)"
Print file + " -> " + file2
EndIf
WaitKey
'' by legend
'Siventää tekstiä
'palauttaa 1, jos onnistui
Function Sisentäjä(file$,file2$)
If FileExists(file)
Dim Väli$,Txt$,Rivi$
Väli = " " 'alku väli
R = OpenToRead(file) 'avataan tiedostot
W = OpenToWrite(file2)
While EOF(R) = 0
Rivi = Trim(ReadLine(R))'luetaan rivi
txt = GetWord(Trim(Rivi),1," ") 'otetaan sana
'käydään yksi rivinen if lause läpi
If txt = "If" And InStr(rivi,"Then") > 0 And InStr(rivi, Chr(34)+ "Then" +Chr(34)) = 0
If GetWord(Mid(Rivi,InStr(Rivi,"Then")),2) = "" Or Left(GetWord(Mid(Rivi,InStr(Rivi,"Then")),2),1) = "'" Or Left(GetWord(Mid(Rivi,InStr(Rivi,"Then")),2),2) = "//"
WriteLine W, Väli + Rivi
väli = väli + " "
Else
WriteLine W, Väli + Rivi
EndIf
'käydään rivin jälkeen lavennettavat
ElseIf txt = "Repeat" Or txt = "For" Or txt = "While" Or txt = "Type" Or txt = "Lock" Or txt = "Function" Or txt = "If"
WriteLine W, Väli + Rivi
väli = väli + " "
'käydään heti sisentävät kohdat
ElseIf txt = "Until" Or txt = "Wend" Or txt = "EndIf" Or txt = "EndFunction" Or txt = "Forever" Or txt = "Unlock" Or txt = "Next" Or Lower(txt) = "endtype" Or (txt = "End" And GetWord(rivi,2) = "Function")Or (txt = "End" And GetWord(rivi,2) = "If") Or (txt = "End" And GetWord(rivi,2) = "Type")
väli = Left(väli,Len(väli)-4)
WriteLine W, Väli + Rivi
'käydään heti sisennettävät kohdat, jotka myös laventavat rivin jälkeen
ElseIf txt = "ElseIf" Or txt = "Case" Or txt = "Else" Or txt = "Default" Or (txt = "Else" And GetWord(rivi,2) = "If")
väli = Left(väli,Len(väli)-4)
WriteLine W, Väli + Rivi
väli = väli + " "
'käydään 8 väliä laventavat kohdat
ElseIf txt = "Select"
WriteLine W, Väli + Rivi
väli = väli + " "
'käydään 8 väliä supistavat kohdat
ElseIf txt = "EndSelect" Or (txt = "End" And GetWord(rivi,2) = "Select")
Väli = Left(väli,Len(väli)-8)
WriteLine W, Väli + Rivi
'käydään ei loogiset kohdat
ElseIf txt = "DrawToImage"
If i = 0 //Lavennettavat
WriteLine W, Väli + Rivi
väli = väli + " "
i = 1
Else 'käydään heti sisennettävät kohdat, jotka myös laventavat rivin jälkeen
väli = Left(väli,Len(väli)-4)
WriteLine W, Väli + Rivi
väli = väli + " "
EndIf
ElseIf txt = "DrawToScreen"
väli = Left(väli,Len(väli)-4)
WriteLine W, Väli + Rivi
i = 0
'kirjoitettaan muut ylös
Else
WriteLine W, Väli + Rivi
EndIf
Wend
CloseFile(R)
CloseFile(W)
Return 1 'palauettaan yksi jos se onnistui
Else
Return 0 'jos epäonnistui
EndIf
EndFunction