Tyhmät kysymykset (I/2010)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
buke44
Active Member
Posts: 169
Joined: Sat May 23, 2009 8:10 pm
Location: Tampere

Re: Tyhmät kysymykset (I/2010)

Post by buke44 »

Onko coolbasicin omilla kamerajutuilla mahdollista tehdä jaettu näyttö, jossa kumpikin puoli kuvaa samaa pelialuetta, mutta eri paikoista. Siis kaksinpeli jaettu näyttö
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Tyhmät kysymykset (I/2010)

Post by temu92 »

On ja jossakin siihen on esimerkitkin. Kuitenkin se perustui jotenkin DrawtoImagen ja Drawscreenin (vai oliko se Drawgame, emmää muista) käyttöön taktisesti.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (I/2010)

Post by phons »

On. Ja koska arvaan että seuraavaksi kysyisit, että "miten", niin vastaan siihen jo nyt:

Code: Select all

camera_img = MakeImage(100,100)

DrawToImage camera_img
    ClsColor cbBlack
    Cls
    
    PositionCamera x,y
    DrawGame
    
DrawtoScreen

siinä luodaan kuva johon piirretään tietty sijainti.. Teet tuon vain kahdelle kuvalle niistä paikosta joista haluat kuvata, epäilisn kahden objektin paikkoja, ja piirrät nuo kuvat ruudulle.

temu92: tässä..
Image
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Tyhmät kysymykset (I/2010)

Post by Nassi_Setä »

Onko näin ettei imagescollide tahdo toimia funktioissa? Itellä heittää mavia :?

edit: kuinka laskea kuvan ja piirretyn ympyrän reunan etäisyys?
Last edited by Nassi_Setä on Sat Mar 27, 2010 12:59 am, edited 1 time in total.
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
naabster
Member
Posts: 56
Joined: Sat Sep 22, 2007 10:10 am

Re: Tyhmät kysymykset (I/2010)

Post by naabster »

mikä tässä koodissa on vikana. Yritän saada myrkyn pelaajasta pois 10 sekunnin kuluttua mutta se ei oikein onnistu.
Välillä myrkky on henkilössä 3 sekkaa ja välillä se ei edes toimi. :oops:

Code: Select all

If myrkytetty=1 Then 
 If Timer()>kärsii+1000 Then 
 elämät=elämät-1 
kärsii=Timer()
 EndIf 
 EndIf 
   
   
   If myrkytetty=1 Then 
 If Timer()>paranee+10000 Then 
myrkytetty=0
paranee=Timer()
 EndIf 
 EndIf 
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset (I/2010)

Post by phons »

Nassi_Setä wrote:Onko näin ettei imagescollide tahdo toimia funktioissa? Itellä heittää mavia :?

edit: kuinka laskea kuvan ja piirretyn ympyrän reunan etäisyys?
Jos et saa kuvaa parametrina se täytyy olla Globaali muuttuja, tämä on aika yleinen syy..
Tällä saat kuvan 0,0:n ja lähimmän ympyrän reunan etäisyyden:

Code: Select all

reuna_x = circle_centre_x + Cos(GetAngle(kuva_x,kuva_y,circle_centre_x,circle_centre_y)) * circle_ray
reuna_y = circle_centre_y + Sin(GetAngle(kuva_x,kuva_y,circle_centre_x,circle_centre_y)) * circle_ray
dis = Distance(kuvax,kuvay,reuna_x,reuna_y)
Pitäisi toimia, en kokeillut..
Image
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

miten voin tehä sillai että jos mulla olisi labyrintti ja se olisi tehty erillisistä objecteista ja mulla olisi ukko niminen objecti jolla voisi liikkua mutta ei voi liikkua labyrintin seinien pääle vain niihin kohtiin missä ei ole seiniä. niin miten sen jutun ettei seinien pääle voi liikkua vois toteuttaa?
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Tyhmät kysymykset (I/2010)

Post by Wingman »

jaahas wrote:miten voin tehä sillai että jos mulla olisi labyrintti ja se olisi tehty erillisistä objecteista ja mulla olisi ukko niminen objecti jolla voisi liikkua mutta ei voi liikkua labyrintin seinien pääle vain niihin kohtiin missä ei ole seiniä. niin miten sen jutun ettei seinien pääle voi liikkua vois toteuttaa?
Collisionobject ukko, seinä
Collisionobject ukko, seinä2...
siihen saakka kunnes kaikkien seinien ja ukon välillä on törmäystunnistus
Manuaali on hyvä apu
- - - -
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

Wingman wrote:
jaahas wrote:miten voin tehä sillai että jos mulla olisi labyrintti ja se olisi tehty erillisistä objecteista ja mulla olisi ukko niminen objecti jolla voisi liikkua mutta ei voi liikkua labyrintin seinien pääle vain niihin kohtiin missä ei ole seiniä. niin miten sen jutun ettei seinien pääle voi liikkua vois toteuttaa?
Collisionobject ukko, seinä
Collisionobject ukko, seinä2...
siihen saakka kunnes kaikkien seinien ja ukon välillä on törmäystunnistus
Manuaali on hyvä apu
Taulukoita olisi myös hyvä käyttää tässä tapauksessa. esim. Dim SeinäObj(seinien_määrä) ja asettaa ukko objeKtille törmäys SetupCollision:illa näihin for loopissa. Mihin muuten tarvitse erillisiä objekteja? Eikös tilemap kelpaisi yhtä hyvin?
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

siinä setupcollisionis on se vika et kö laitan sen esim. setupcollision(ukko,seinä) niin olen sen seinän alapuolella ja sitten painan ylös ukko ei liiku mut sittenkö painan esim. vasemmalle se on sen seinän vasemmalla puolella niin miten toi voidaan korjata
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Tyhmät kysymykset (I/2010)

Post by Wingman »

jaahas wrote:siinä setupcollisionis on se vika et kö laitan sen esim. setupcollision(ukko,seinä) niin olen sen seinän alapuolella ja sitten painan ylös ukko ei liiku mut sittenkö painan esim. vasemmalle se on sen seinän vasemmalla puolella niin miten toi voidaan korjata
en oikeen saanut selvää, itse varmistan kaikki törmäykset niin, että teen setupcollision(ukko,seinä) ja setupcollision(seinä,ukko), silloin kun törmäyksiä käytän... objectsoverlap on myös kätevä komento, laittaa esim näin:

Code: Select all

If not objectsoverlap(ukko,seinä) then 
    if upkey() then moveobject ukko,3
endif 
//tarkistetaan, ettei ukko ole yhtään seinän päällä ja liikutetaan sitä jos ylänuoli on pohjassa
- - - -
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

Wingman wrote:
jaahas wrote:siinä setupcollisionis on se vika et kö laitan sen esim. setupcollision(ukko,seinä) niin olen sen seinän alapuolella ja sitten painan ylös ukko ei liiku mut sittenkö painan esim. vasemmalle se on sen seinän vasemmalla puolella niin miten toi voidaan korjata
en oikeen saanut selvää, itse varmistan kaikki törmäykset niin, että teen setupcollision(ukko,seinä) ja setupcollision(seinä,ukko), silloin kun törmäyksiä käytän... objectsoverlap on myös kätevä komento, laittaa esim näin:

Code: Select all

If not objectsoverlap(ukko,seinä) then 
    if upkey() then moveobject ukko,3
endif 
//tarkistetaan, ettei ukko ole yhtään seinän päällä ja liikutetaan sitä jos ylänuoli on pohjassa
tota ei voi käyttää sen takia tässä pelissä koska tässä liikutaan ruuduittain
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

jaahas wrote:tota ei voi käyttää sen takia tässä pelissä koska tässä liikutaan ruuduittain
ObjectsOverlap on silti kätevä funktio.

Code: Select all

If KeyHit (cbkeyup) Then
    TranslateObject ukko, 0, 32
    If ObjectsOverlap (seinä, ukko) Then TranslateObject ukko, 0, -32
EndIf
EDIT: Jee, 156...0. posti
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2010)

Post by MetalRain »

Jos pelissä kerran liikutaan ruuduttain niin ukkojen ja seinien törmäystarkistus on nopeampaa toteuttaa taulukoilla.

Code: Select all

//määritellään sopivan kokoinen taulukko kartalle
Dim seinä(5,5)

//tehdään taulukkoon muutama seinä
For i=1 To 5
    seinä(Rand(1,5),Rand(1,5))=1
Next i

ukko= LoadObject("Media\guy.bmp", 72)

//lasketaan maailmakoordinaatit ruudun yläkulmalle
//eli sille kohdalle jossa kartta alkaa maailmakoordinaateissa
basex=-ScreenWidth()/2
basey=ScreenHeight()/2
//liikutetaan ukko aluksi kartan ekaan ruutuun, siten että keskellä ruutua
PositionObject ukko,basex+ObjectSizeX(ukko)/2,basey-ObjectSizeY(ukko)/2

DrawToWorld ON 

Repeat 

    //kerätään muuttujiin tieto siitä liikutaanko
    movex=(KeyHit(cbkeyright)-KeyHit(cbkeyleft))*32
    movey=(KeyHit(cbkeyup)-KeyHit(cbkeydown))*32

    //jos liikutaan niin ainoastaan silloin tarvii tarkistaa
    If movex Or movey Then 
    
        //otetaan ukon koordinaatit aluksi ylös
        ukkox=ObjectX(ukko)
        ukkoy=ObjectY(ukko)

        //lasketaan ukon koordinaatit kartalla ruutuina
        ukkoruutux=(ukkox+movex-basex)/32
        ukkoruutuy=(basey-ukkoy-movey)/32

        //jos ukko on kartan sisäpuolella
        If (ukkoruutux=>0)(ukkoruutux=<5)(ukkoruutuy=>0)(ukkoruutuy=<5) Then 
            //niin tarkistetaan törmääkö seinään, mikäli ei, liikutetaan
            If seinä(ukkoruutux,ukkoruutuy)=0 Then TranslateObject ukko, movex,movey
        EndIf 
    
    EndIf 

    //tämä jotta ruudut piirtyvät objektien päälle
    //ei tarvitse käyttää jos seinät objekteja
    DrawGame

    //en jaksanut tehdä seinistä objekteja joten piirrän ne
    //piirtokomennoilla
    For x=0 To 5
        For y=0 To 5 
            If seinä(x,y) Then Box basex+x*32,basey-y*32,32,32,1
        Next y
    Next x

    DrawScreen 

Forever
EDIT: Oisihan tuon voinut tehdä niinkin että laitettaisiin objektille muuttujat jotka kertoo sen paikan karttaruutuina, mutta tuossa tuli nyt tuo miten saa laskettua ruutukoordinaatit karttaruuduiksi. Toki ois vielä voinut pistää ne kameran liikkeet, mutta jääköön jotain harjoitukseksi.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

eli siis mun pitäs tehä 26 seinää ja kaikille omat paikat pitääkö mun laittaa kaikkien kordinaatit ja miten sen teen?
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Tyhmät kysymykset (I/2010)

Post by Awaclus »

jaahas wrote:eli siis mun pitäs tehä 26 seinää ja kaikille omat paikat pitääkö mun laittaa kaikkien kordinaatit ja miten sen teen?
Helpoimmin onnistuu simppelisti tilemapilla, ja jos et jostain syystä halua tehdä tilemapilla, laitat tosiaankin kaikkien koordinaatit taulukkoon.
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

Chaosworm wrote:
jaahas wrote:eli siis mun pitäs tehä 26 seinää ja kaikille omat paikat pitääkö mun laittaa kaikkien kordinaatit ja miten sen teen?
Helpoimmin onnistuu simppelisti tilemapilla, ja jos et jostain syystä halua tehdä tilemapilla, laitat tosiaankin kaikkien koordinaatit taulukkoon.
miten laitan ne sinne taulukkoon?
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset (I/2010)

Post by JATothrim »

"read the manual first and then ask, otherwise be quiet and die" - Iskulause käytettäväksi, foorumilaisille kun joku tyyppi ei jaksa lukea manuaalia.
EDIT:

edit jaa, niin halp jäi pois. TÄSSÄ: http://www.coolbasic.com/cbmanual/language/arrays.html

-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Tyhmät kysymykset (I/2010)

Post by MetalRain »

Joka seinälle pitää antaa koordinaatit, että se ne saisi paikoilleen. Kannattaa tosin miettiä miten ne annat.

Tälläistä ei kannata tehdä:

Code: Select all

seinä1=LoadObject("media/cow.bmp",360)
PositionObject seinä1,-150,120
seinä2=LoadObject("media/cow.bmp",360)
PositionObject seinä2,-118,120
seinä3=LoadObject("media/cow.bmp",360)
PositionObject seinä3,-86,120
seinä4=LoadObject("media/cow.bmp",360)
PositionObject seinä4,-54,120

Repeat

    DrawScreen 
Forever
Voit luoda ja asettaa useamman lehmän paikoilleen jonkin säännön mukaan:

Code: Select all

Dim seinäobj(4)

For i=0 To 3
    seinäobj(i)=LoadObject("media/cow.bmp",360)
    PositionObject seinäobj(i),-150+i*32,120
Next i

Repeat

    DrawScreen 

Forever
Ja tietenkään ei tarvitse turhaan ladata samaa objektia moneen kertaan vaan sen voi jättää isäntäobjektiksi.

Seinien paikan voi myös lukea tiedostosta:

Code: Select all

//taulukko seinäobjekteille
Dim seinät(1,1)

//tämä tekee uuden tiedoston jotta voidaan
//simuloima sitä että tiedosto on valmiina lukua varten
//ensimmäinen rivi kertoo kartan leveyden ja korkeuden
// X-merkki on seinä 
f=OpenToWrite("seinätiedosto.wtf")
    WriteLine f,"7,5"
    WriteLine f,"XX    X"
    WriteLine f,"X  XXXX"
    WriteLine f,"X X   X"
    WriteLine f,"X   X X"
    WriteLine f,"XXXXX X"
CloseFile f

// Luodaan seinille isäntäobjekti, joka piilotetaan. Tämä säästää resursseja,
//koska objektin lataaminen on hitaampaa kuin kopiointi.
isäntäseinä=LoadObject("media/cow.bmp")
ShowObject isäntäseinä,OFF

//luetaan kartta
f=OpenToRead("seinätiedosto.wtf")
    rivi$=ReadLine(f)
    //selvitetään koko
    rivinpituus=Int(GetWord(rivi$,1,","))
    rivejä=Int(GetWord(rivi$,2,","))
    
    //muutetaan seinätaulukko oikean kokoiseksi
    ReDim seinät(rivinpituus,rivejä)
    
    //luetaan rivi kerrallaan
    rivit=0
    While Not EOF(f)
        rivi$=ReadLine(f) 
        
        //käydään riviltä jokainen merkki 
        For i=1 To Min(Len(rivi$),rivinpituus)
        
            //jos X-merkki löytyy 
            If (Mid(rivi$,i,1)="X") Then 
                //kopioidaan isäntäseinäobjekti
                seinät((i-1),rivit)=CloneObject(isäntäseinä)
                //ja asetetaan se oikeaan paikkaan
                PositionObject seinät((i-1),rivit),-150+(i-1)*32,120-rivit*32
            EndIf 
        Next i
        rivit=rivit+1
    Wend 
CloseFile f

//poistetaan turha tiedosto ettei jää viemään tilaa
DeleteFile "seinätiedosto.wtf"

Repeat

    DrawScreen 
Forever
jaahas
Advanced Member
Posts: 307
Joined: Fri Feb 05, 2010 11:36 pm
Location: Tornio

Re: Tyhmät kysymykset (I/2010)

Post by jaahas »

miks tää heittää memory acces violationia

Code: Select all

Dim wall(26)

For i=1 To 26

PositionObject wall(i),-118,276
PositionObject wall(i),-276,276
PositionObject wall(i),-39,276
PositionObject wall(i),40,276
PositionObject wall(i),-276,118
PositionObject wall(i),-276,39
PositionObject wall(i),-197,118
PositionObject wall(i),-197,-40
PositionObject wall(i),198,-40
PositionObject wall(i),277,-40
PositionObject wall(i),-39,197
PositionObject wall(i),198,197
PositionObject wall(i),198,118
PositionObject wall(i),119,118
PositionObject wall(i),-39,118
PositionObject wall(i),40,118
PositionObject wall(i),40,-40
PositionObject wall(i),40,-198
PositionObject wall(i),-39,-198
PositionObject wall(i),-39,-40
PositionObject wall(i),-197,-198
PositionObject wall(i),-118,-198
PositionObject wall(i),198,-198
PositionObject wall(i),277,-198
PositionObject wall(i),198,-277
PositionObject wall(i),277,-277

Next i

SCREEN 791,791

FrameLimit 20

seinä=LoadObject("kuvat\wall.png")
ShowObject seinä,OFF

Repeat

wall(i)=CloneObject(seinä)

DrawScreen

Forever
Locked