Raycastingilla. Tätä on jo kokeiltu CB:llä, pelin nimi oli muistaakseni Shadow Squad. Tutoriaaleja aiheeseen on internet täynnä.Ihminen wrote:Miten olisi mahdollista tehdä "fps" peli cb:llä niinkuin mitä esim. Wolfenstein 3d(2.5d) oli?
Ja miten siis pääsisin alkuun jos haluaisin alkaa sellaista peliä tekemään?
Tyhmät kysymykset (I/2011)
Re: Tyhmät kysymykset (I/2011)
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic
Kehittäjä
CoolBasic Classic
Re: Tyhmät kysymykset (I/2011)
Suosittelen kuitenkin, että toistaiseksi pysyttelet vielä vähän hillitymmissä projekteissa. Sille on ihan hyä syykin olemassa, miksei Projektit-alue ole kolmiulotteisia pelejä pullollaan, vaikka esimerkiksi koodaaja on Efektit-ketjussa osoittanut, että kolmiulotteisuus onnistuu CoolBasicilla joten kuten.Ihminen wrote:Miten olisi mahdollista tehdä "fps" peli cb:llä niinkuin mitä esim. Wolfenstein 3d(2.5d) oli?
Ja miten siis pääsisin alkuun jos haluaisin alkaa sellaista peliä tekemään?
Re: Tyhmät kysymykset (I/2011)
Onhan cbSDK:ssa ollut jo iät ja ajat monikulmioiden renderöintituki. Se vaan sattuu olemaan helvetin hidasta touhua.
Aavesoturin(ko) raycaster-moottori sen sijaan pyörii vallan mainiosti.
Aavesoturin(ko) raycaster-moottori sen sijaan pyörii vallan mainiosti.
Re: Tyhmät kysymykset (I/2011)
Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
Eli a ja s spawnaa objecteja.
Code: Select all
Type monster
Field obj
End Type
Type enemy
Field obj
End Type
A=LoadObject("media\cow.bmp", 320)
B=LoadObject("media\cow.bmp", 320)
Tyyppi=1
Tyyppi2=2
Repeat
If KeyDown(cbkeya) Then
tyyppi2=Rand(1,2)
hir2.enemy = New(enemy)
If tyyppi2=1 Then hir2\obj=CloneObject(A)
If tyyppi2=2 Then hir2\obj=CloneObject(B)
PositionObject hir2\obj,Rand(0,-250),Rand(0,-250)
End If
If KeyDown(cbkeys) Then
hir.monster = New(monster)
If tyyppi=1 Then hir\obj=CloneObject(A)
If tyyppi=2 Then hir\obj=CloneObject(B)
PositionObject hir\obj,Rand(0,250),Rand(0,250)
End If
For hir2.enemy = Each enemy
For hir.monster = Each monster
PointObject hir2\obj,hir\obj
MoveObject hir2\obj,5
Next hir
Next hir2
DrawScreen
Forever
...
Re: Tyhmät kysymykset (I/2011)
ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:Code: Select all
Koodia...[/quote] Mitä tuossa olisi tarkoitus tapahtua? Olisi nimittäin helpompi auttaa jos tietäisi mitä koodin pitäisi tehdä...
Re: Tyhmät kysymykset (I/2011)
Et esittänyt mitään ongelmaa. Mutta tässä mahdolliset virheet:ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
1. Aina kun painat "s", luodaan samanlainen ukkeli kuin viimeksi "a":lla luotu.
2. Jos hir\obj-objekteja on enemmän kuin 1, kaikki hir2-objektit yrittävät päästä jokaisen luo, ja päätyvät näiden keskipisteeseen.
Lisäksi, jos tyypit enemy ja monster ovat vihollisille tarkoitettuja tyyppikokoelmia, voi saman asian hoitaa vain yhellä kokoelmalla, jossa on ylimääräinen kenttä joka kertoo minkälaisesta ukkelista on kyse.
Re: Tyhmät kysymykset (I/2011)
Code: Select all
FrameLimit 60
pongiskartta=LoadMap("CBProjektit\Media\pongiskartta.til","CBProjektit\Media\pongistausta.bmp")
PlayObject pongiskartta,0,0,1
pongauttajavasen =LoadObject("CBProjektit\Media\pongauttajavasen.png")
pongauttajaoikea =LoadObject("CBProjektit\Media\pongauttajaoikea.png")
PositionObject pongauttajavasen, -170,10
PositionObject pongauttajaoikea,170,10
MaskObject pongauttajaoikea,cbWhite
MaskObject pongauttajavasen,cbWhite
Repeat
If KeyDown(cbkeyW) Then MoveObject pongauttajavasen,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajavasen,0,3
If KeyDown(cbkeyW) Then MoveObject pongauttajaoikea,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajaoikea,0,3
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2011)
Jos teen laatikon piirto komennoilla, kuinka saisin "päällystettyä" laatikon kuvalla?
Saikohan tästä mitään selvää...
Saikohan tästä mitään selvää...
Re: Tyhmät kysymykset (I/2011)
Yksinkertainen vastaus on, että piirrä laatikkoon käyttäen apuna DrawImageBoxia.
Monimutkaisempi vastaus, jolla saat myös erimuotoisia kuvia päällystettyä:
Edit.
Vai tarkoitatko tällaista päällystystä:
Monimutkaisempi vastaus, jolla saat myös erimuotoisia kuvia päällystettyä:
Code: Select all
//Ladataan tausta
map = LoadImage( "media\map.bmp" )
//Tehdään template johon tausta maalataan
imgYmpyra = MakeImage( ImageWidth( map ), ImageHeight( map ) )
MaskImage imgYmpyra, cbMagenta //asetetaan maskiväri. Tärkeä!
//Piirretään templateen ympyrä maskivärillä.
DrawToImage imgYmpyra
Color cbMagenta
Circle 0, 0, ImageWidth( imgYmpyra )
DrawToScreen
//Luodaan lopullinen kuva
lopullinenKuva = MakeImage( ImageWidth( imgYmpyra ), ImageHeight( imgYmpyra ) )
DrawToImage lopullinenKuva
DrawImage map, 0, 0 'ensin piirretään haluttu tausta
//Sitten template. Kaikki templatessa ollut väri, joka on sama templaten
//maskivärin kanssa (tässä magenta) on läpinäkyvää.
DrawImage imgYmpyra, 0, 0
DrawToScreen
DeleteImage imgYmpyra
DeleteImage map
Repeat
//Lopputulos on neliön muotonen kuva, jossa on ympyrä-kartta keskellä.
//Koska tämän kuvan maskiväri on musta, on kuva tavallaan ympyrän muotoinen.
DrawImage lopullinenKuva, 0, 0
DrawScreen
Forever
Vai tarkoitatko tällaista päällystystä:
Code: Select all
kuva = MakeImage( ScreenWidth(), ScreenHeight() )
maalausKuva = LoadImage( "media\cow.bmp" )
cWidth = RoundUp( ImageWidth( kuva ) / ImageWidth( maalausKuva ) )
cHeight = RoundUp( ImageHeight( kuva ) / ImageHeight( maalausKuva ) )
DrawToImage kuva
For x = 0 To cWidth
For y = 0 To cHeight
DrawImage maalausKuva, x * ImageWidth( maalausKuva ), y * ImageHeight( maalausKuva )
Next y
Next x
DrawToScreen
Repeat
DrawImage kuva, 0, 0
DrawScreen
Forever
Last edited by Jonez on Mon Aug 15, 2011 8:12 pm, edited 1 time in total.
Re: Tyhmät kysymykset (I/2011)
Ideahan on ihan oikein mutta jostain syystä minulla ei ainakaan näy kartasta palastakaan... vain pinkkiä ympyrää näkyy ja mustaa sen ympärilläJonez wrote:Monimutkaisempi vastaus, jolla saat myös erimuotoisia kuvia päällystettyä:
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)
Ei, vaan teen strategiapeliä. Monster tyypit olisi sinun vallassa, sekä ne muut vihollisia Ongelmana juuri tuo kakkonen.. Miten voisi tehdä koodinpätkän, jolla vihut hyökkää ensimmäisen näössä olevan sinun sotilaan luo? Tässä tarvittaisi tietysti myös näkö hahmoille, mutta en ehtinyt tehdä...Jonez wrote:Et esittänyt mitään ongelmaa. Mutta tässä mahdolliset virheet:ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
1. Aina kun painat "s", luodaan samanlainen ukkeli kuin viimeksi "a":lla luotu.
2. Jos hir\obj-objekteja on enemmän kuin 1, kaikki hir2-objektit yrittävät päästä jokaisen luo, ja päätyvät näiden keskipisteeseen.
Lisäksi, jos tyypit enemy ja monster ovat vihollisille tarkoitettuja tyyppikokoelmia, voi saman asian hoitaa vain yhellä kokoelmalla, jossa on ylimääräinen kenttä joka kertoo minkälaisesta ukkelista on kyse.
...
Re: Tyhmät kysymykset (I/2011)
Tee vastustajille kenttä "target", joka säilöö kohteen jäsenen muistiosoittajan (ConvertToInteger()). Kun käyt kaikki objektit läpi sisäkkäisissä silmukoissa, tarkasta onko kyseinen oma hahmo vihollisen kohde. Jos on, vihollinen kohdistaa (PointObject()) ja ampuu. Jos vihollisella ei ole kohdetta, se ottaa sellaisen kun pääsee tarpeeksi lähelle tai saa näköyhteyden.
Tässä koodi joka ei yksinään toimi:
Tässä koodi joka ei yksinään toimi:
Code: Select all
Type omat
Field obj
EndType
Type vastustajat
Field obj
Field target
EndType
For ienemy.vastustajat = Each vastustajat
For iomat.omat = Each omat
If Distance2( ienemy\obj, ioma\obj ) < haluttu_hyokkaysetaisyys And ienemy\target = 0 Then
ienemy\target = ConvertToInteger( ioma )
EndIf
enemTarget.omat = ConvertToType( ienemy\target )
If ioma = enemTarget Then
PointObject ienemy\obj, iomat\obj
Ammu()
EndIf
Next iomat
Next ivastustajat
Re: Tyhmät kysymykset (I/2011)
Latasin etusivulta Wanhan CoolBasicin ja kun yritin suorittaa sen oppitunteja niin mitään ei tapahtunut. Siis ohjelma ei heitä ilmoitusta että edellinen ajo olisi käynnissä, vaan ainoastaan näyttää sekunnin ajan lataavan jotain, jonka jälkeen mitään ei tapahdu. Olen kokeillut suorittaa järjestelmänvalvojana ja erilaisilla yhteensopivuustiloissa mutta mikään ei auta. Mistä tämä voisi johtua? (Käyttis Win7)
Re: Tyhmät kysymykset (I/2011)
Teen jääkiekkopeliä tosin vain rangaistuslaukauskilpailu.
Kuinka vuoronvaihdon pystyy tekemään järkevästi???????
tein paintobjectilla sen että pelaajan paita jne. muuttuu mutta ongelma onkin:
Kun kiekko osuu maaliin niin b=b+1 ja paintobject RUOTSIPELAAJA,SUOMIPELAAJA
ja nyt kun on suomalaisen vuoro ja kiekko menee maaliin niin tapahtuu:b=b+1
mutta koska nyt on suomen vuoro ja suomi saa maalin niin saa ruotsi pisteen.??
(kukakohan tajusi)
Kuinka vuoronvaihdon pystyy tekemään järkevästi???????
tein paintobjectilla sen että pelaajan paita jne. muuttuu mutta ongelma onkin:
Kun kiekko osuu maaliin niin b=b+1 ja paintobject RUOTSIPELAAJA,SUOMIPELAAJA
ja nyt kun on suomalaisen vuoro ja kiekko menee maaliin niin tapahtuu:b=b+1
mutta koska nyt on suomen vuoro ja suomi saa maalin niin saa ruotsi pisteen.??
(kukakohan tajusi)
Aloittelija koodari joka
KOTISIVU
Re: Tyhmät kysymykset (I/2011)
Code: Select all
if Maali() Then
if ruotsipelaa then
ruotsinpisteet + 1
elseif suomipelaa then
suomenpisteet + 1
endif
Endif
Re: Tyhmät kysymykset (I/2011)
Oletko koittanut asentaa CB:tä vaikkapa johonkin toiseen kansioon kuin Program Files? Oletko varma, ettei virustorjuntaohjelmistosi äksyile liikaa ja estä hiljaisesti CB:tä? F-Secure ainakin tuppasi jossain vaiheessa murahtelemaan CB:n kyvylle tehdä .exe-tiedostoja, mutta ei enää uusimmassa versiossa tuota tee.Akuji wrote:Latasin etusivulta Wanhan CoolBasicin ja kun yritin suorittaa sen oppitunteja niin mitään ei tapahtunut. Siis ohjelma ei heitä ilmoitusta että edellinen ajo olisi käynnissä, vaan ainoastaan näyttää sekunnin ajan lataavan jotain, jonka jälkeen mitään ei tapahdu. Olen kokeillut suorittaa järjestelmänvalvojana ja erilaisilla yhteensopivuustiloissa mutta mikään ei auta. Mistä tämä voisi johtua? (Käyttis Win7)
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)
Olen tehnyt CB:lle oman kansion ja virustorjuntaohjelmankaan ei pitäisi haitata CB:n toimintaa. Toinen CB-versio toimii minulla moitteettomasti, mutta tämä ladattu Wanha CB ei vain toimi.VesQ wrote:Oletko koittanut asentaa CB:tä vaikkapa johonkin toiseen kansioon kuin Program Files? Oletko varma, ettei virustorjuntaohjelmistosi äksyile liikaa ja estä hiljaisesti CB:tä? F-Secure ainakin tuppasi jossain vaiheessa murahtelemaan CB:n kyvylle tehdä .exe-tiedostoja, mutta ei enää uusimmassa versiossa tuota tee.Akuji wrote:Latasin etusivulta Wanhan CoolBasicin ja kun yritin suorittaa sen oppitunteja niin mitään ei tapahtunut. Siis ohjelma ei heitä ilmoitusta että edellinen ajo olisi käynnissä, vaan ainoastaan näyttää sekunnin ajan lataavan jotain, jonka jälkeen mitään ei tapahdu. Olen kokeillut suorittaa järjestelmänvalvojana ja erilaisilla yhteensopivuustiloissa mutta mikään ei auta. Mistä tämä voisi johtua? (Käyttis Win7)
Re: Tyhmät kysymykset (I/2011)
Code: Select all
FrameLimit 60
SCREEN 1200,1000,32,cbfullscreen
pongiskartta=LoadMap("pongiskartta.til","pongistausta.png")
PlayObject pongiskartta,0,0,1
pongauttajavasen =LoadObject("pongauttajavasen.png")
pongauttajaoikea =LoadObject("pongauttajaoikea.png")
PositionObject pongauttajavasen, -220,10
PositionObject pongauttajaoikea,220,10
MaskObject pongauttajaoikea,cbWhite
MaskObject pongauttajavasen,cbWhite
SetupCollision pongauttajavasen,pongiskartta,1,4,2
SetupCollision pongauttajaoikea,pongiskartta,1,4,2
Repeat
If KeyDown(cbkeyW) Then MoveObject pongauttajavasen,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajavasen,0,3
If KeyDown(cbkeyW) Then MoveObject pongauttajaoikea,-0,-3
If KeyDown(cbkeyS) Then MoveObject pongauttajaoikea,0,3
DrawScreen
Forever
Re: Tyhmät kysymykset (I/2011)
Windowediin voi laittaa minkä tahansa näyttökoon mutta fullscreenissa toimii vain ne tietyt, (joita näytönohjain/näyttö supporttaa tai jotain sinne päin) eli 640x480, 800x600, 1280x960, 1600x1200 jne. Wikipediassa tais lukea ne kaikki.Guest wrote:viime kysymyksestä olen saanut kartan toimimaan mutta nyt kun alan laittaa peliä fullscreenille niin cb heittää ilmoituksen "unable to set graphics mode". tietääkö kukaan miksi?Code: Select all
FrameLimit 60 SCREEN 1200,1000,32,cbfullscreen pongiskartta=LoadMap("pongiskartta.til","pongistausta.png") PlayObject pongiskartta,0,0,1 pongauttajavasen =LoadObject("pongauttajavasen.png") pongauttajaoikea =LoadObject("pongauttajaoikea.png") PositionObject pongauttajavasen, -220,10 PositionObject pongauttajaoikea,220,10 MaskObject pongauttajaoikea,cbWhite MaskObject pongauttajavasen,cbWhite SetupCollision pongauttajavasen,pongiskartta,1,4,2 SetupCollision pongauttajaoikea,pongiskartta,1,4,2 Repeat If KeyDown(cbkeyW) Then MoveObject pongauttajavasen,-0,-3 If KeyDown(cbkeyS) Then MoveObject pongauttajavasen,0,3 If KeyDown(cbkeyW) Then MoveObject pongauttajaoikea,-0,-3 If KeyDown(cbkeyS) Then MoveObject pongauttajaoikea,0,3 DrawScreen Forever
Valmiit pelit: House of Horrors , Battle Zone , Über Ball , Itdoti , Space Chaos , Bloxxplosives ☺
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013
Projekti jota teen ehkä joskus vielä: viewtopic.php?f=11&t=2636 <-- Tämä rivi päivitetty 14.1.2013