Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
Pekka

Re: Tyhmät kysymykset

Post by Pekka » Wed Jun 04, 2008 11:00 pm

Oho, eipäs tietenkään ole, mutta tuo oli kyllä todella hidasta, ainakin minun koneellani.

Guest

Re: Tyhmät kysymykset

Post by Guest » Wed Jun 04, 2008 11:00 pm

Teen sivultakuvattua avaruustaistelupeliä.
Haluan saada mun aluksen liikkumaan ylöspäin jos objekti aim on sen yläpuolella ja alaspäin jos se on sen alapuolella.
Se menee jostain syystä nyt niin, että alus liikkuu ylöspäin jos aim on sen vasemmalla puolella ja päinvastoin.

Code: Select all

FrameLimit 45

oma_alus=LoadObject("Media\ship.bmp", 60)
aim=LoadObject("Media\crosshair.bmp")
TranslateObject oma_alus,-150,0

Repeat

  
    aimvert = MouseWX()
    aimhor = MouseWY()
    PositionObject aim,aimvert,aimhor
    PointObject oma_alus,aim
    alusvert = ObjectX(oma_alus) 
    If aimvert < alusvert Then TranslateObject oma_alus,0,-2
    If aimvert > alusvert Then TranslateObject oma_alus,0,2

    DrawScreen

Until EscapeKey()
End

Pekka

Re: Tyhmät kysymykset

Post by Pekka » Wed Jun 04, 2008 11:05 pm

FrameLimit 45

oma_alus=LoadObject("Media\ship.bmp", 60)
aim=LoadObject("Media\crosshair.bmp")
TranslateObject oma_alus,-150,0

Repeat


aimvert = MouseWX()
aimhor = MouseWY()
PositionObject aim,aimvert,aimhor
PointObject oma_alus,aim
alushor = ObjectY(oma_alus)
If aimhor < alushor Then TranslateObject oma_alus,0,-2
If aimhor > alushor Then TranslateObject oma_alus,0,2

DrawScreen

Until EscapeKey()
End

Tuon pitäisi toimia.

Guest

Re: Tyhmät kysymykset

Post by Guest » Wed Jun 04, 2008 11:10 pm

kiitos se toimii. :roll:

User avatar
Maamyyrä
Newcomer
Posts: 27
Joined: Thu Jun 05, 2008 10:59 am

Re: Tyhmät kysymykset

Post by Maamyyrä » Thu Jun 05, 2008 12:55 pm

Minun ongelmanani on laatikko. Kun piirrän sen ruudun alareunaan se näkyy vilaukselta ja sitten se katoaa. Olen huomannut että repeat komento tuhoaa laatikon. Miten saisin laatikon pysymään repeat komennosta huolimatta :?: Jos se on repeatin sisällä se kyllä näkyy muttaa vilkkuu häiritsevästi. :(

APUA TARVITAAN

Juu etsin asiaa haulla mutta en löytänyt.
One object to rule them all

Just don't kill the Master

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Tyhmät kysymykset

Post by koodaaja » Thu Jun 05, 2008 1:12 pm

Code: Select all

Repeat
    Box 10, 10, 20, 20
    DrawScreen
Forever
Ja ei, repeat-komento ei tuhoa laatikkoa.

Vaikuttaapi vähän siltä, ettet ole sisäistänyt loopin käsitettä kovin hyvin. Eli kaikkea, mikä on repeatin ja foreverin välissä, toistetaan. Jos jotain ei toisteta, se tapahtuu kerran. Eli jos piirrät laatikon loopin ulkopuolella, se piirretään tasan kerran. Se siis välähtää näytöllä.

Ja kaikki mikä on näytöllä, on näytöllä kunnes seuraavan kerran komennetaan DrawScreen tai Cls. Silloin näyttö tyhjennetään ja (drawscreenin tapauksessa) piirretään uudelleen. Eli silloin vanha laatikko katoaa, ja jollei sitä piirretä uudestaan, se ei mistään näytölle ilmesty.

Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi » Thu Jun 05, 2008 2:14 pm

Niin kuinkas kuvan saa pyörimään?
Tällä tavoin se ainakin on todella hidas:

kulma=0
repeat

if leftkey() then kulma+1 then rotateimage kuva,kulma
if rightkey() then kulma-1 then rotateimage kuva,kulma

drawscreen
forever

User avatar
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Tyhmät kysymykset

Post by Nemesis » Thu Jun 05, 2008 2:47 pm

Ja jotta FPS ei nousisi kovin korkealle, kannattaa kuva kiertää etukäteen. Ks. manuaalin esimerkki komennolle RotateImage. Miksihän muuten kuvan pyörittäminen on hidasta, mutta objekteilla sujuu nopeasti?
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.

Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi » Thu Jun 05, 2008 3:01 pm

No tuossa on tulos mitä sain aikaseksi kun yritin väkertää tuon manuaalin esimerkin avulla, mutten vieläkään käsitä miten saan tuon tatin kääntymään kun painan vasemmalle tai oikealle.

Code: Select all

Dim kuvat(360)
alus=LoadImage("media\tatti.bmp")


x=10
y=10

Smooth2D ON 

For i=0 To 360
kuvat(i)=CloneImage(alus)
RotateImage kuvat(i),-i
Next i

Repeat



Text 10,100,FPS()


If UpKey() Then y-1
If DownKey() Then y+1
If LeftKey() Then DrawImage kuvat(angle),x,y Then x-1
If RightKey() Then x+1

angle=WrapAngle(angle+1)

DrawImage alus,x,y

DrawScreen

Forever

User avatar
Nemesis
Member
Posts: 51
Joined: Sat May 17, 2008 1:54 pm

Re: Tyhmät kysymykset

Post by Nemesis » Thu Jun 05, 2008 3:10 pm

Suosittelisin käyttämään objekteja. Coolbasicissa on niiden käsittelyyn niin hyvät funktiot valmiina.
Asian tuntian oikein kirjoitus ohjeet:
-Älä tee yhdys sana virheitä.
-Vältä lyhenteitä mahd. muk.
-Yksi sanaiset lauseet? Unohda.

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: Tyhmät kysymykset

Post by Koodiapina » Thu Jun 05, 2008 3:24 pm

Maamyyrä, jos luuppi ei kerta miellytä, etkä sitä tarvitse niin kokeile tätä:

Code: Select all

Box 10,10,20,20
DrawScreen OFF
WaitKey 
Nemesis, kannattaa heti irtautua objekteista, jos on siihen valmis. Ne ovat liiankin helppo tapa koodata. Aloittelijoille tietysti hyvä valinta.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi » Thu Jun 05, 2008 4:12 pm

Nemesis wrote:Suosittelisin käyttämään objekteja. Coolbasicissa on niiden käsittelyyn niin hyvät funktiot valmiina.
Juu, niiden käyttö minulta sujuukin jo jotenkin, mutta ajattelin yrittää luolalentelypeliä, jossa kartan on aika pakko olla kuva. Mutta taitaa sittenkin olla paras pysyä näissä objekteissa vielä :ugeek:

User avatar
Olwi
Devoted Member
Posts: 557
Joined: Sun Dec 30, 2007 5:15 pm
Location: Muhos

Re: Tyhmät kysymykset

Post by Olwi » Thu Jun 05, 2008 4:14 pm

Sepi wrote:
Nemesis wrote:Suosittelisin käyttämään objekteja. Coolbasicissa on niiden käsittelyyn niin hyvät funktiot valmiina.
Juu, niiden käyttö minulta sujuukin jo jotenkin, mutta ajattelin yrittää luolalentelypeliä, jossa kartan on aika pakko olla kuva. Mutta taitaa sittenkin olla paras pysyä näissä objekteissa vielä :ugeek:
Kartan?
Mikäs pakko sitä karttaa on pyärittää?
Huuda mun ip:tä!

Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi » Thu Jun 05, 2008 4:31 pm

Sanoinko muka että olin sitä karttaa pyörittämässä? Aluksia olisi tarkoitus pyörittää ja niiden alustenkin pitäisi olla kuvia, koska kuva-objekti törmäykset ovat vaikeita tai mahdottomia.

User avatar
MikkoK
Devoted Member
Posts: 813
Joined: Thu Jun 05, 2008 2:13 pm
Location: City 17

Re: Tyhmät kysymykset

Post by MikkoK » Thu Jun 05, 2008 4:57 pm

Auttakaa nyt joku edes tuonne mun aiheeseen PLZ

Code: Select all

#aha. @ IRCNet
<Grandi> Voit laittaa jo valmiiks hailaittiin "Amis-Mikko", koska alan kutsua sua sillä nimellä.

User avatar
Murskaaja
Member
Posts: 92
Joined: Tue Aug 28, 2007 8:19 pm
Contact:

Re: Tyhmät kysymykset

Post by Murskaaja » Thu Jun 05, 2008 5:17 pm

Sepi wrote:Sanoinko muka että olin sitä karttaa pyörittämässä? Aluksia olisi tarkoitus pyörittää ja niiden alustenkin pitäisi olla kuvia, koska kuva-objekti törmäykset ovat vaikeita tai mahdottomia.
Sovellettu coolbasicin esimerkistä:

Code: Select all

Dim images(360)




Text 0,0,"Pre-calculating.. Please wait"
DrawScreen

Smooth2D ON

'First Pre-calculate all images 
masterimage= LoadImage("Media\cow.bmp")

'Generate 360 rotated versions from the master Image 
For i=0 To 360
    images(i)=CloneImage(masterimage)
    
    RotateImage images(i), -i
Next i

Color cbblack
ClsColor cbwhite
x = 200
y = 150
'The actual game-loop 
Repeat

    'Draw at the center
    x = x+((UpKey()-DownKey())*3*Sin(angle+90))
    y = y+((UpKey()-DownKey())*3*Cos(angle+90))
    DrawImage images(angle),x,y
    

    'change the angle
    angle=WrapAngle(angle+(LeftKey()-RightKey())*5)

    Text 0,0,"Angle: "+angle
    Text 200,0,FPS()

    DrawScreen

Until EscapeKey()
ASCII star wars Xtreme | Cool Bombers | Combat (kehitteillä)

RedShadow productions

Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi » Thu Jun 05, 2008 5:28 pm

Kiitoksia. Näyttää vaan sen verran vaikeilta nuo Wrapangle sini kosini jutut, että täytynee varmaan jokunen vuosi odotella ennen kuin yrittää uudestaan tätä projektia aloittaa :lol:

User avatar
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Tyhmät kysymykset

Post by atomimalli » Thu Jun 05, 2008 8:02 pm

Kyllä ne oppii kun ei suoraan mene asiaa.

Tässä yksi tapa oppia sinit ja cosinit: http://edu.pyhaselka.fi/matikka/ohj20.htm
tai ainakin jotain niiden luonteesta.

huomaa että säde on aina saman pituinen ;)

User avatar
Olwi
Devoted Member
Posts: 557
Joined: Sun Dec 30, 2007 5:15 pm
Location: Muhos

Re: Tyhmät kysymykset

Post by Olwi » Thu Jun 05, 2008 8:38 pm

Sepi wrote:Sanoinko muka että olin sitä karttaa pyörittämässä? Aluksia olisi tarkoitus pyörittää ja niiden alustenkin pitäisi olla kuvia, koska kuva-objekti törmäykset ovat vaikeita tai mahdottomia.
Poista mahdoton-sana.
Mut tässä kuvilla,löysin koneeltani;)
(en ole siis itse tätä tehnyt)

Code: Select all

SCREEN 640,480
DrawToWorld OFF,ON,OFF //Piirtää kuvat keskelle ruutua.
HotSpot ON //Pistää kuvan piirron keskelle.

Tausta = LoadImage("Media\level.bmp") //Lataa taustan.

Dim Alus(360) //Luo alukselle taulukon 360 asteelle.

Alus(0) = LoadImage("Media\ship.bmp") //Lataa aluksen.

//Luo alukselle kääntyvyyden.
For i=1 To 360
    Alus(i) = CloneImage(Alus(0))
    RotateImage Alus(i), i
Next i

Const lNopeus = 0.2 //Liikkuvuusnopeus.
Const lNopeusMax = 5 //Max liikkuvuusnopeus.
Const kNopeus = 5 //Käännösnopeus.

X# = 0.0 //Akseli X.
Y# = 0.0 //Akseli Y.

VanhaX# = 0.0 //Akseli X törmäystä varten.
VanhaY# = 0.0 //Akseli Y törmäystä varten.

Kulma = 0 //Kulma.

NopeusX# = 0.0 // Nopeus akseli X.
NopeusY# = 0.0 // Nopeus akseli Y.

Repeat

    //Piirtää kuvat.
    DrawImage Tausta, 0, 0 //Piirretään ennen kaikkea muuta, jotta se on alimmaisena.
    DrawImage Alus(Kulma), X, Y //Piirretään alus

    //Päivitetään nopeus ja törmäys.
    VanhaX = X
    VanhaY = Y
    X = X+NopeusX
    Y = Y+NopeusY

    If ImagesCollide(Tausta, 0, 0, 0, Alus(0), X, Y, 0) Then
        X = VanhaX
        Y = VanhaY
        NopeusX = NopeusX*-0.6
        NopeusY = NopeusX*-0.6
    End If

    //Eteenpäin -systeemi.
    If UpKey() Then
        NopeusX = NopeusX+Cos(Kulma)*lNopeus
        NopeusY = NopeusY+Sin(Kulma)*lNopeus
    End If
    
    //Tarkistaa mennäänkö liian nopeasti.
    If NopeusX > lNopeusMax Then NopeusX - lNopeus
    If NopeusY > lNopeusMax Then NopeusY - lNopeus
    If NopeusX < -lNopeusMax Then NopeusX + lNopeus
    If NopeusY < -lNopeusMax Then NopeusY + lNopeus

    //Kääntyminen.
    If LeftKey() Then Kulma = Kulma-kNopeus
    If RightKey() Then Kulma = Kulma+kNopeus
    
    Kulma = TarkistaKulma(Kulma) //AINA sen jälkeen, kun kulmaa on muutettu, jottei taulukkoa lueta yli!
    
    PositionCamera X, -Y //Pistää kameran seuraamaan alusta.

DrawScreen
Forever

Function TarkistaKulma(Kulma)
    //Katsoo onko kulma yli 360 -rajan.
    While Kulma > 360
        Kulma-360
    Wend

    //Katsoo onko kulma ali 0 -rajan.
    While Kulma < 0
        Kulma+360
    Wend

    Return Kulma //Palauttaa tarkistetun kulman.
End Function 
Huuda mun ip:tä!

Osaamaton

Erpekele (Perkele)

Post by Osaamaton » Thu Jun 05, 2008 8:59 pm

En ole varma käsitinkö oikein, mutta tänne siis postataan kaikki "turhat" ongelmat joihin ei muualta löydä vastausta?
Ok, minullakin olisi eräs:
FrameLimit 40 'rajoita nopeutta

kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
muzak = LoadSound ("Media\SK_Battle.mp3")
ukko = LoadObject ("Media\guy.bmp",72)
SetupCollision ukko, kartta, 1, 4, 2
botti = LoadObject ("Media\guy.bmp",75)
SetupCollision guy, kartta, 2, 5, 3

Repeat
PlaySound muzak
'Ukon ohjaus
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
If UpKey() Then MoveObject ukko,2
If DownKey() Then MoveObject ukko,-2
If Timer() > alkuaika + 1000 Then
newangle=Rand(360)
alkuaika = timer()
EndIf
RotateObject botti,CurveAngle(newangle,ObjectAngle(botti),10)
MoveObject botti,1

UpdateGame

CloneCameraPosition ukko

DrawScreen

Forever


Miksi tuo alkaa valittaa jo tässä vaiheessa, että jokaisesta asiasta, että Can't Load?
(Pistin vain osan, etteivät ne eräät ja tietyt muutkin osaamattomat kopioisi kaikkea itselleen oppimatta mitään) ;)

Locked