Tyhmät kysymykset (I/2010)
Re: Tyhmät kysymykset (I/2010)
Onko coolbasicin omilla kamerajutuilla mahdollista tehdä jaettu näyttö, jossa kumpikin puoli kuvaa samaa pelialuetta, mutta eri paikoista. Siis kaksinpeli jaettu näyttö
Re: Tyhmät kysymykset (I/2010)
On ja jossakin siihen on esimerkitkin. Kuitenkin se perustui jotenkin DrawtoImagen ja Drawscreenin (vai oliko se Drawgame, emmää muista) käyttöön taktisesti.
Re: Tyhmät kysymykset (I/2010)
On. Ja koska arvaan että seuraavaksi kysyisit, että "miten", niin vastaan siihen jo nyt:
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ä..
Code: Select all
camera_img = MakeImage(100,100)
DrawToImage camera_img
ClsColor cbBlack
Cls
PositionCamera x,y
DrawGame
DrawtoScreen
temu92: tässä..
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
Re: Tyhmät kysymykset (I/2010)
Onko näin ettei imagescollide tahdo toimia funktioissa? Itellä heittää mavia
edit: kuinka laskea kuvan ja piirretyn ympyrän reunan etäisyys?
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.
Re: Tyhmät kysymykset (I/2010)
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.
Välillä myrkky on henkilössä 3 sekkaa ja välillä se ei edes toimi.
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
Re: Tyhmät kysymykset (I/2010)
Jos et saa kuvaa parametrina se täytyy olla Globaali muuttuja, tämä on aika yleinen syy..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?
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)
Re: Tyhmät kysymykset (I/2010)
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?
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Tyhmät kysymykset (I/2010)
Collisionobject ukko, seinä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ä2...
siihen saakka kunnes kaikkien seinien ja ukon välillä on törmäystunnistus
Manuaali on hyvä apu
Re: Tyhmät kysymykset (I/2010)
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?Wingman wrote:Collisionobject ukko, seinä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ä2...
siihen saakka kunnes kaikkien seinien ja ukon välillä on törmäystunnistus
Manuaali on hyvä apu
-On selkeästi impulsiivinen koodaaja joka...
Re: Tyhmät kysymykset (I/2010)
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
-
- Devoted Member
- Posts: 594
- Joined: Tue Sep 30, 2008 4:30 pm
- Location: Ruudun toisella puolella
Re: Tyhmät kysymykset (I/2010)
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: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
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
Re: Tyhmät kysymykset (I/2010)
tota ei voi käyttää sen takia tässä pelissä koska tässä liikutaan ruuduittainWingman wrote: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: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 korjataCode: 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
Re: Tyhmät kysymykset (I/2010)
ObjectsOverlap on silti kätevä funktio.jaahas wrote:tota ei voi käyttää sen takia tässä pelissä koska tässä liikutaan ruuduittain
Code: Select all
If KeyHit (cbkeyup) Then
TranslateObject ukko, 0, 32
If ObjectsOverlap (seinä, ukko) Then TranslateObject ukko, 0, -32
EndIf
Re: Tyhmät kysymykset (I/2010)
Jos pelissä kerran liikutaan ruuduttain niin ukkojen ja seinien törmäystarkistus on nopeampaa toteuttaa taulukoilla.
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.
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
Re: Tyhmät kysymykset (I/2010)
eli siis mun pitäs tehä 26 seinää ja kaikille omat paikat pitääkö mun laittaa kaikkien kordinaatit ja miten sen teen?
Re: Tyhmät kysymykset (I/2010)
Helpoimmin onnistuu simppelisti tilemapilla, ja jos et jostain syystä halua tehdä tilemapilla, laitat tosiaankin kaikkien koordinaatit taulukkoon.jaahas wrote:eli siis mun pitäs tehä 26 seinää ja kaikille omat paikat pitääkö mun laittaa kaikkien kordinaatit ja miten sen teen?
Re: Tyhmät kysymykset (I/2010)
miten laitan ne sinne taulukkoon?Chaosworm wrote:Helpoimmin onnistuu simppelisti tilemapilla, ja jos et jostain syystä halua tehdä tilemapilla, laitat tosiaankin kaikkien koordinaatit taulukkoon.jaahas wrote:eli siis mun pitäs tehä 26 seinää ja kaikille omat paikat pitääkö mun laittaa kaikkien kordinaatit ja miten sen teen?
Re: Tyhmät kysymykset (I/2010)
"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...
Re: Tyhmät kysymykset (I/2010)
Joka seinälle pitää antaa koordinaatit, että se ne saisi paikoilleen. Kannattaa tosin miettiä miten ne annat.
Tälläistä ei kannata tehdä:
Voit luoda ja asettaa useamman lehmän paikoilleen jonkin säännön mukaan:
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:
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
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
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
Re: Tyhmät kysymykset (I/2010)
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