Tyhmät kysymykset (I/2010)
- Zero
- Lead Developer
- Posts: 727
- Joined: Sun Aug 26, 2007 2:30 pm
- Location: Helsinki, Finland
- Contact:
Re: Tyhmät kysymykset (I/2010)
Silloin kun kirjoitat tiedostoon WriteInt:llä, huomaa että se menee sinne binäärimuodossa. Jos avaat tiedoston tarkasteltavaksi jossain normaalissa tekstieditorissa, kuten Windowsin muistiossa, näet tyhjää (ainakin niissä tapauksissa kun kirjoitettava luku on positiivinen ja lähellä nollaa). Tarkasta tiedostokoko - sen pitäisi olla 8 tavua. Voit tietysti siirtää myös kursorin tiedoston loppuun (esim. muistiossa tarkasteltuna), niin huomaat että sinne on mennyt 8 merkkiä.
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic
http://www.coolbasic.com/blog
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic
http://www.coolbasic.com/blog
-
- Newcomer
- Posts: 9
- Joined: Mon Oct 04, 2010 7:23 pm
Re: Tyhmät kysymykset (I/2010)
Jos joku tuntee marcoderin 3d-talomoottorin, niin:
Saako talon kattoja muutettua läpinäkyviksi lennossa? Siis jos haluaa päästä talon sisään.
Tässä on koodini, miksi se ei muuta kattoa?
Saako talon kattoja muutettua läpinäkyviksi lennossa? Siis jos haluaa päästä talon sisään.
Tässä on koodini, miksi se ei muuta kattoa?
Code: Select all
Include "cbMap.cb"
FrameLimit 40
MapLoad("Media\yardmap.til", "Media\tileset.bmp")
player = LoadObject("Media\soldier.bmp", 72)
CameraFollow player, 1, 20
SetupCollision player, gCurrentMap, 2, 4, 2
roof1 = LoadImage ("Media\whitegrid.bmp")
wall= LoadImage ("Media\whitegrid.bmp")
Global kuva
kuva=1
Function Transparentize(img,path$)
Select kuva
Case 1
DeleteImage img
img = LoadImage ("Media\black.bmp")
kuva=0
Case 0
DeleteImage img
img = LoadImage (path)
kuva=1
End Select
End Function
b1 = CreateBuilding(5,5,0,5,5,5)
SetTexture(b1,TX_ROOF,roof1)
SetTexture(b1,TX_FRONT,wall)
SetTexture(b1,TX_BACK,wall)
SetTexture(b1,TX_LEFT,wall)
SetTexture(b1,TX_RIGHT,wall)
PositionObject player,-100,100
SAFEEXIT OFF
Repeat
MoveObject player, (UpKey() - DownKey()) * 5
TurnObject player, (LeftKey() - RightKey()) * 5
DrawGame
Draw3DMap()
If KeyHit(cbKeyspace)Then
Transparentize(roof1,"Media\whitegrid.bmp")
EndIf
DrawScreen
Until EscapeKey()
ReleaseTextures()
-
- Advanced Member
- Posts: 308
- Joined: Tue Nov 25, 2008 8:06 pm
- Contact:
Re: Tyhmät kysymykset (I/2010)
En ole paljon tuota käyttänyt mutta epäilen, että tekstuuri pitää asettaa uudestaan SetTexture():lla tuon Transparentize():n käytön jälkeen.
a.k.a. Gehock
-
- Newcomer
- Posts: 9
- Joined: Mon Oct 04, 2010 7:23 pm
Re: Tyhmät kysymykset (I/2010)
Kiitos! Pitää tosin ratkaista pari muuta ongelmaa, koska seinät ei näy sisältäpäin. En varmaan edes tarvitse Transparentizea, kun tuo SetTexture on niin kätevä.
Re: Tyhmät kysymykset (I/2010)
Koska olen tyhmä enkä itse keksi kunnollista kaavaa laskea koordinaatteja isometrisille tileille niin voiko joku joka on vähän valistuneempi asiasta ohjata oikeeseen suuntaan? Tää oma systeemi kyllä tekee niinkun kuuluu (ainakin suurin piirtein) mutta on tuskin kovin optimaalinen :e
Oma viritelmä:
xs = x:n alotuskoordinaatti (nk. anchor)
ys = y:n alotuskoordinaatti
w ja h = tilen leveys ja korkeus
Lisäks musta tuntuu että mun tilejen koko on vähä päin jotakin; tän viritelmän tilet on 78x39, kuitenkin 80x40 tuntuis loogisemmalta. En kuitenkaan saanut sitä oikein toimimaan. Tips?
Oma viritelmä:
Code: Select all
xs+x*Cos(60)*w+y*(w/2), ys-x*(h/2)+y*Sin(60)*(h/2+3)
ys = y:n alotuskoordinaatti
w ja h = tilen leveys ja korkeus
Lisäks musta tuntuu että mun tilejen koko on vähä päin jotakin; tän viritelmän tilet on 78x39, kuitenkin 80x40 tuntuis loogisemmalta. En kuitenkaan saanut sitä oikein toimimaan. Tips?
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Tyhmät kysymykset (I/2010)
Itse olen aina käyttänyt tällaista:temu92 wrote:Koska olen tyhmä enkä itse keksi kunnollista kaavaa laskea koordinaatteja isometrisille tileille niin voiko joku joka on vähän valistuneempi asiasta ohjata oikeeseen suuntaan?
Oma viritelmä:xs = x:n alotuskoordinaatti (nk. anchor)Code: Select all
xs+x*Cos(60)*w+y*(w/2), ys-x*(h/2)+y*Sin(60)*(h/2+3)
ys = y:n alotuskoordinaatti
w ja h = tilen leveys ja korkeus
Lisäks musta tuntuu että mun tilejen koko on vähä päin jotakin; tän viritelmän tilet on 78x39, kuitenkin 80x40 tuntuis loogisemmalta. En kuitenkaan saanut sitä oikein toimimaan. Tips?
Code: Select all
xs-y*h+x*w, ys+(ys*h+xs*w)/2.0
Re: Tyhmät kysymykset (I/2010)
Tuli tenkkapoo tiedostojen käsittelyssä:
Eli mavia heittää. Mikä neuvoksi?
Code: Select all
f=OpenToRead(filu) // tämä tiedosto on olemassa
f2=OpenToWrite(filu+".part")
Repeat
tl1=ReadString(f)
If tl1 = "¤" Then
temp=ReadInt(f)
For i=1 To 8
WriteInt f2, temp
Next i
Else
WriteString f2, tl1
EndIf
Until EOF(f)
Re: Tyhmät kysymykset (I/2010)
Miten olet tallentanut luettavan tiedoston? ReadString ja ReadInt funktiot eivät lue selkokielisiä rivejä vaan niillä luettava data on pitänyt kirjoittaa oikeassa muodossa (esim käyttämällä komentoja WriteString ja WriteInt). Käytä Readline komentoa jos haluat lukea tiedostosta selkokielisiä rivejä.
Esim näin:
Esim näin:
Code: Select all
f=OpenToRead(filu) // tämä tiedosto on olemassa
f2=OpenToWrite(filu+".part")
Repeat
rivi$=Readline(f)
If left(rivi$,1) = "¤" Then
temp=int(mid(rivi$,2))
rivi$=""
For i=1 To 8
rivi$=rivi$+str(temp)
Next i
EndIf
Writeline f2, rivi$
Until EOF(f)
Re: Tyhmät kysymykset (I/2010)
Olen tekemässä tiedostonpakkausohjelmaa, joten tietotyyppi voi olla mikä tahansa. Mitä teen?MetalRain wrote:Miten olet tallentanut luettavan tiedoston? ReadString ja ReadInt funktiot eivät lue selkokielisiä rivejä vaan niillä luettava data on pitänyt kirjoittaa oikeassa muodossa (esim käyttämällä komentoja WriteString ja WriteInt). Käytä Readline komentoa jos haluat lukea tiedostosta selkokielisiä rivejä.
Esim näin:Code: Select all
f=OpenToRead(filu) // tämä tiedosto on olemassa f2=OpenToWrite(filu+".part") Repeat rivi$=Readline(f) If left(rivi$,1) = "¤" Then temp=int(mid(rivi$,2)) rivi$="" For i=1 To 8 rivi$=rivi$+str(temp) Next i EndIf Writeline f2, rivi$ Until EOF(f)
Re: Tyhmät kysymykset (I/2010)
Luet ReadInt:llä jokaisen tavun kokonaisluvun erikseen ja niiden arvojen perusteella päättelet jotain. ReadLine-komento kun saattaa kerralla nielaista koko tiedoston sisällön, eikä se välttämättä ole optimaalisin ratkaisu.DJ-Filbe wrote:Olen tekemässä tiedostonpakkausohjelmaa, joten tietotyyppi voi olla mikä tahansa. Mitä teen?
Jos et välttämättä tarvitse tavun kokoista palikkaa aina, niin voit myös käyttää funktioita ReadShort ja ReadByte tarpeesi mukaan. ReadByte taitaa olla paras vaihtoehto tiedostonpakkausohjelmalle.
EDIT: Hups. Pikku moka tietotyypeissä
Last edited by valscion on Thu Oct 07, 2010 6:50 pm, edited 1 time in total.
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)
Protip: ReadByte lukee tavun.VesQ wrote:Jos et välttämättä tarvitse tavun kokoista palikkaa aina, niin voit myös käyttää funktioita ReadShort ja ReadByte tarpeesi mukaan. ReadByte taitaa olla paras vaihtoehto tiedostonpakkausohjelmalle.
Re: Tyhmät kysymykset (I/2010)
En löytänyt mistään, joten päädyin kysymään:
eli miten saan peliini semmoisen jutun, että kun on ampunut vihun, niin se ei katoa vaan siihen tulee esim. verta?
eli miten saan peliini semmoisen jutun, että kun on ampunut vihun, niin se ei katoa vaan siihen tulee esim. verta?
Re: Tyhmät kysymykset (I/2010)
Yksi keino on PaintObjectilla maalata vihulaisen objekti tyypissä uudelleen veriläiskäksi ja tekoälyn päivityksessä sitten huomioida jos vihulaisen HP on pienempi tai tasan 0 eli älä liikuta tai pistä botteja ampumaan silloin.
Re: Tyhmät kysymykset (I/2010)
Tein niin, mutta ei kuitenkaan onnistunut. Kaikki vihut muuttivat muotoa. Olen varmasti tehnyt jotain väärin. Pystyisitkö laittamaan jotain koodinpätkää tai semmoista?
Re: Tyhmät kysymykset (I/2010)
Jos teet viholliset tyypeillä tai taulukoilla ja käytät vihujen luonnissa CloneObject-komentoa, niin muistathan ettet laita PaintObjectilla sen alkuperäisen objektin (josta kaikki kloonit ovat lähtöisin) ulkomuotoa muuksi? Sinun tulee vaihtaa vain sen tietyn kloonin ulkomuotoa sillä PaintObjectilla.Akuji wrote:Tein niin, mutta ei kuitenkaan onnistunut. Kaikki vihut muuttivat muotoa. Olen varmasti tehnyt jotain väärin. Pystyisitkö laittamaan jotain koodinpätkää tai semmoista?
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)
En ole oikein tarvinnut PaintObjectia ennen, joten asia ei ole minulle niin tuttu. Komennon sijoittamisen kohdalla on se suurin pulma. Asiaa pitäisi hieman valottaa.
Eli haluan peliini...
-kun ammun vihun, se muuttuu veriläiskäksi, ja silloin siinä ei enää ole törmäystunnistetta, eli toisin sanoen -se ei voi enää vahingoittaa pelaajaa.
-se ei liiku enää sen jälkeen, kun healtti on nolla.
Tämä on pelirunko, joka on hyvin samanlainen kuin omani, joten siihen voi hyvin lisätä.
Eli haluan peliini...
-kun ammun vihun, se muuttuu veriläiskäksi, ja silloin siinä ei enää ole törmäystunnistetta, eli toisin sanoen -se ei voi enää vahingoittaa pelaajaa.
-se ei liiku enää sen jälkeen, kun healtti on nolla.
Tämä on pelirunko, joka on hyvin samanlainen kuin omani, joten siihen voi hyvin lisätä.
Code: Select all
SCREEN 800,600,0,1
FrameLimit 40
playerpoints = 0
font = LoadFont("Verdana",32,1,1)
SetFont font
// Luodaan tyyppikokoelma ammuksia varten
Type BULLETS
Field obj
End Type
// Ladataan media
GoSub LoadMedia
// Määritetään tyyppikokoelma vihollisille ja luodaan pari vihollista
Type ENEMIES
Field obj
Field energy
End Type
GoSub MakeEnemies
/////// PÄÄSILMUKKA ///////
Repeat
GoSub CheckButtons
GoSub EnemyAI
GoSub CheckBullets
GoSub DrawGUI
// Siirretään kameraa pelaajan mukana
CloneCameraPosition player
// Tarkistetaan onko taustamusiikki pysähtynyt ja käynnistetään tarvittaessa uudelleen
If SoundPlaying(backgroundmusic) = 0 Then
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
EndIf
DrawScreen
Until EscapeKey()
/////// ALIOHJELMAT ///////
// Aliohjelma jossa ladataan pelissä tarvittava media
LoadMedia:
// Ladataan kartta ja animoidaan se
map = LoadMap("Media\cdm2.til", "Media\Tileset.bmp")
PlayObject map,0,0,0.5
// Ladataan panosobjektin grafiikat ja piilotetaan objekti
bulletobject = LoadObject("Media\bullet.bmp", 72)
ShowObject bulletobject, OFF
// Ladataan pelaaja ja asetetaan törmäyksentunnistus kartan seinien ja pelaaja välille
player = LoadObject("Media\soldier.bmp", 72)
SetupCollision player,map,2,4,2
// Ladataan vihollinen ja piilotetaan objekti
enemyobject = LoadObject("Media\guy.bmp", 72)
ShowObject enemyobject, OFF
// Ladataan äänet
backgroundmusic = PlaySound("Media\SK_Battle2.mp3", 40)
shot = LoadSound("Media\gun 1.wav")
scream = LoadSound("Media\scream1.wav")
Return
// Aliohjelma joka tarkistaa näppäinpainallukset
CheckButtons:
If UpKey() Then MoveObject player,4
If DownKey() Then MoveObject player,-4
If LeftKey() Then TurnObject player,5
If RightKey() Then TurnObject player,-5
// Tarkistetaan painetaanko ampumisnäppäintä ja jos,
// niin luodaan ammus ja törmäystunnistus sille
If KeyHit(cbkeySpace) Then
PlaySound shot, 40
blt.BULLETS = New(BULLETS)
blt\obj = CloneObject(bulletobject)
CloneObjectPosition blt\obj, player
CloneObjectOrientation blt\obj, player
MoveObject blt\obj,15
SetupCollision blt\obj,map,2,4,1
ResetObjectCollision blt\obj
EndIf
Return
// Aliohjelma, jossa tehdään viholliselle alkeellinen tekoäly
EnemyAI:
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan näkeekö vihollisobjekti pelaajaobjekti ja
// jos näkee niin aloitetaan liikuttamaan pelaajaa kohti
If ObjectSight(enem\obj,player) Then
PointObject enem\obj, player
MoveObject enem\obj, 2
EndIf
Next enem
Return
// Aliohjelma, jossa läpikäydään ammukset
CheckBullets:
For blt.BULLETS = Each BULLETS
MoveObject blt\obj, 10
For enem.ENEMIES = Each ENEMIES
// Tarkistetaan osuuko ammus viholliseen
If ObjectsOverlap(blt\obj, enem\obj, 2) Then
deleteobj = 1
enem\energy = enem\energy -20
playerpoints = playerpoints + 5
EndIf
Next enem
bulcollisions = CountCollisions(blt\obj)
For i = 1 To bulcollisions
// Tarkistetaan onko ammus osunut seinään
If GetCollision(blt\obj, i) > 1 Then deleteobj = 1
Next i
If deleteobj = 1 Then
DeleteObject blt\obj
Delete blt
deleteobj = 0
EndIf
Next blt
Return
// Aliohjelma jossa piirretään "käyttöliittymä"
DrawGUI:
DrawGame
DrawToWorld ON
// Käydään viholliset läpi
For enem.ENEMIES = Each ENEMIES
PosX = ObjectX(enem\obj) - (ObjectSizeX(enem\obj)/2)
PosY = ObjectY(enem\obj) + ObjectSizeY(enem\obj)
EnWidth = enem\energy / 3
Color cbWhite
Box PosX,PosY,33,6
Color cbRed
Box PosX+1,PosY-1,EnWidth-2,4
If enem\energy <= 0 Then
// Jos energia nollassa, niin toistetaan huuto ja poistetaan vihollistyyppi
PlaySound scream,40
DeleteObject enem\obj
Delete enem
EndIf
Next enem
DrawToWorld OFF
// Kirjoitetaan pisteet näytölle (ensimmäinen on varjostus)
Color cbBlack : Text 12,12, playerpoints
Color cbWhite : Text 10,10, playerpoints
Return
// Aliohjelma, jossa määritetään kaksi vihollista ja niiden energia
MakeEnemies:
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,-500
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,500
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,-800
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
enem.ENEMIES = New(ENEMIES)
enem\obj = CloneObject(enemyobject)
PositionObject enem\obj,0,800
SetupCollision enem\obj,map,2,4,1
SetupCollision enem\obj,player,2,2,2
SetupCollision player,enem\obj,2,2,2
ResetObjectCollision enem\obj
enem\energy = 100
Return
Re: Tyhmät kysymykset (I/2010)
kattokaa nää koodinpätkät
repeattia ennen
repeatin jälkeen
ja nyt on ongelmana et jos oon vahingoittajan tai voimistajan päällä,niin voimaa tulee ja health lähtee =D
eli oon kumman vaa päällä nii lähtee hp ja tulee voimaa.
Ja en aio tehä tätä nyt kahella eri typellä koska tiiän,et sen saa näinkin toimii =)
repeattia ennen
Code: Select all
Type objects
Field obj
End Type
Code: Select all
For vahingoittaja.objects = Each objects
If ObjectsOverlap (vahingoittaja\obj,pelihahmo) Then
hp=hp-1
EndIf
Next vahingoittaja
For voimistaja.objects = Each objects
If ObjectsOverlap (voimistaja\obj,pelihahmo) Then
voimat=voimat+1
EndIf
Next voimistaja
eli oon kumman vaa päällä nii lähtee hp ja tulee voimaa.
Ja en aio tehä tätä nyt kahella eri typellä koska tiiän,et sen saa näinkin toimii =)
Re: Tyhmät kysymykset (I/2010)
Riippumatta siitä, käytkö läpi kaikki saman tyyppikokoelman jäsenet nimellä voimistaja vai vahingoittaja, käyt ne kaikki läpi sillä nimellä kun olet määrännyt ne kaikki läpi käytävän (in be4 "through a corridor"). Voit tehdä niin, että laitat samalle tyyppikokoelmalle kaksi kenttää, joissa toisessa on objekti ja toisessa on joko 1 tai 2 riippuen siitä, minkä tyyppinen objekti on kyseessä ja sitten tuon ObjectsOverlapin kohdalla tarkistat, mikä on toisessa kentässä olevan muuttujan arvo.koodaus 600 wrote:kattokaa nää koodinpätkät
repeattia ennenrepeatin jälkeenCode: Select all
Type objects Field obj End Type
ja nyt on ongelmana et jos oon vahingoittajan tai voimistajan päällä,niin voimaa tulee ja health lähtee =DCode: Select all
For vahingoittaja.objects = Each objects If ObjectsOverlap (vahingoittaja\obj,pelihahmo) Then hp=hp-1 EndIf Next vahingoittaja For voimistaja.objects = Each objects If ObjectsOverlap (voimistaja\obj,pelihahmo) Then voimat=voimat+1 EndIf Next voimistaja
eli oon kumman vaa päällä nii lähtee hp ja tulee voimaa.
Ja en aio tehä tätä nyt kahella eri typellä koska tiiän,et sen saa näinkin toimii =)
Re: Tyhmät kysymykset (I/2010)
Kaikki on melkein valmista, mutta vihollisen ampumisen jälkeen raadolle jää törmäystunnistus, jota en ole pystynyt poistamaan. En tiedä miksi. En ole edes laittanut sille törmäystä sitä luodessani. Olen kokeillut eri tekniikoita, mutta ei tehoa. Osaako joku auttaa, miten törmäystunnistus poistetaan raadolta?