Page 37 of 50

Re: Tyhmät kysymykset (I/2011)

Posted: Sun Aug 14, 2011 9:06 pm
by Ilmuri
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?
Raycastingilla. Tätä on jo kokeiltu CB:llä, pelin nimi oli muistaakseni Shadow Squad. Tutoriaaleja aiheeseen on internet täynnä.

Re: Tyhmät kysymykset (I/2011)

Posted: Sun Aug 14, 2011 10:20 pm
by Awaclus
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?
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.

Re: Tyhmät kysymykset (I/2011)

Posted: Sun Aug 14, 2011 10:40 pm
by esa94
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.

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 4:14 pm
by ukkeli
Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:

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 
Eli a ja s spawnaa objecteja.

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 4:27 pm
by Kumiankka
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)

Posted: Mon Aug 15, 2011 5:18 pm
by Jonez
ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
Et esittänyt mitään ongelmaa. Mutta tässä mahdolliset virheet:
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)

Posted: Mon Aug 15, 2011 6:22 pm
by Guest

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
muutin asiat mitä mulle neuvottiin ja tarkistin että kaikki tarvittavat tiedostot ovat antamallani polulla mutta silti se ei viitsi avata karttaa. :?:

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 7:28 pm
by Ihminen
Jos teen laatikon piirto komennoilla, kuinka saisin "päällystettyä" laatikon kuvalla?
Saikohan tästä mitään selvää... :roll:

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 8:07 pm
by Jonez
Yksinkertainen vastaus on, että piirrä laatikkoon käyttäen apuna DrawImageBoxia.

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
Edit.
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

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 8:12 pm
by valscion
Jonez wrote:Monimutkaisempi vastaus, jolla saat myös erimuotoisia kuvia päällystettyä:
Ideahan on ihan oikein mutta jostain syystä minulla ei ainakaan näy kartasta palastakaan... vain pinkkiä ympyrää näkyy ja mustaa sen ympärillä

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 8:30 pm
by ukkeli
Jonez wrote:
ukkeli wrote:Teen tällä hetkellä erästä projektia. Vastaani tuli iso ongelma, en osaa oikeen selittää... Eli annan esimerkin:
Et esittänyt mitään ongelmaa. Mutta tässä mahdolliset virheet:
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.
Ei, vaan teen strategiapeliä. Monster tyypit olisi sinun vallassa, sekä ne muut vihollisia :D 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ä...

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 8:44 pm
by Jonez
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:

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)

Posted: Mon Aug 15, 2011 9:00 pm
by ukkeli
Kiitos :D

Re: Tyhmät kysymykset (I/2011)

Posted: Mon Aug 15, 2011 11:07 pm
by Akuji
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)

Posted: Tue Aug 16, 2011 3:12 pm
by Laurenzo
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)

Re: Tyhmät kysymykset (I/2011)

Posted: Tue Aug 16, 2011 4:55 pm
by Jonez

Code: Select all

if Maali() Then
    if ruotsipelaa then
        ruotsinpisteet + 1
    elseif suomipelaa then
        suomenpisteet + 1
    endif
Endif

Re: Tyhmät kysymykset (I/2011)

Posted: Tue Aug 16, 2011 5:31 pm
by valscion
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)
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.

Re: Tyhmät kysymykset (I/2011)

Posted: Tue Aug 16, 2011 6:18 pm
by Akuji
VesQ wrote:
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)
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.
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. :|

Re: Tyhmät kysymykset (I/2011)

Posted: Tue Aug 16, 2011 8:31 pm
by Guest

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
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?

Re: Tyhmät kysymykset (I/2011)

Posted: Tue Aug 16, 2011 8:44 pm
by skinkken
Guest wrote:

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
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?
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.