Page 23 of 154

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 3:36 pm
by nevssons
Ohjelmassa on kaksi silmukkaa ja toisesta silmukasta pitäis päästä takaisin ekaan mitä tehdä?
(olen jo kokeillut gotosavedlocationia)

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 3:43 pm
by M.R
Yksinkertaisesti.Gosubilla.Kirjoita vaikka näin ensinmäisen silmukan alkuun.

Code: Select all

ekasimlmukka:

sitten toisen silmukan alkuun sama mutta vähän erillä taval:

Code: Select all

tokasilmukka: 
ja sitten jos olet toisessa silmukassa ja haluat ensinmäiseen niin kirjoita:

Code: Select all

GoSub ekasilmukka
gotosavedlocation jatkaa ohjelmaa tallennetusta paikasta joka palauttaa muuttujat ja semmoset.
Se olisi voinut sekoittaa vaikka koko homman.

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 5:03 pm
by nevssons
Sama juttu gotolla ja gotosavedgamella

voisko joku tehä vian määrityksen?

Code: Select all

Kuva=MakeImage (400,300) 
alku:
viivaon=1 
hiiriy=1
hiirix=1
Repeat
DrawToScreen 
DrawImage kuva,0,0
If hiiriy=1 And hiirix=1 Then hiiri=1 Else hiiri=0
If viivaon=1 And MouseHit(1) Then viiva=1 Else viiva=0
If hiiri=1 And viiva=1 Then
 viivax1=MouseX()
 viivay1=MouseY()
 Exit 
 EndIf 

DrawScreen
Forever  

Repeat
DrawImage kuva,0,0
Line viivax1,viivay1,MouseX(),MouseY()
If hiiriy=1 And hiirix=1 Then hiiri=1 Else hiiri=0
If viivaon=1 And MouseHit(1) Then viiva=1 Else viiva=0
If hiiri=1 And viiva=1 Then
 viivax2=MouseX()
 viivay2=MouseY()
 DrawToImage kuva
 Line viivax1,viivay1,viivax2,viivay2
 DrawToScreen
 Goto alku
EndIf  
If MouseHit(2) Then SaveImage kuva,"data/kuva.bmp"
DrawToScreen
DrawScreen
Forever 

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 5:17 pm
by M.R
nevssons wrote:Sama juttu gotolla ja gotosavedgamella

voisko joku tehä vian määrityksen?

Code: Select all

 koodia
Testasin ja se pomppii silmukasta toiseen.Vika taitaa olla muussa koodissa.

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 5:22 pm
by nevssons
M.R wrote:
nevssons wrote:Sama juttu gotolla ja gotosavedgamella

voisko joku tehä vian määrityksen?

Code: Select all

 koodia
Testasin ja se pomppii silmukasta toiseen.Vika taitaa olla muussa koodissa.
se toimii jos goton poistaa mutta alku pistettä ei voi vaihtaa

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 5:40 pm
by Marcoder
nevssons wrote:se toimii jos goton poistaa mutta alku pistettä ei voi vaihtaa
Rajua purkkaa! Venyy ja paukkuu.

Jos nyt ihan oikein tuon viritelmän ymmärsin niin siinä piirrellään viivoja kuvaan. Jonkinlainen piirto-ohjelma siis?

Jos nyt ihan heti alkuun unohdetaan goto ja tehdään sen käyttö vaikka rangaistavaksi niin tätä voitaisiin lähestyä hieman toisin.

Code: Select all

canvas = MakeImage(ScreenWidth(), ScreenHeight())
drawMode = False
startX = 0
startY = 0
Repeat
    If MouseHit(1) Then
        If drawMode Then
            DrawToImage canvas
            Line startX, startY, MouseX(), MouseY()
            DrawToScreen
        EndIf
        startX = MouseX()
        startY = MouseY()
        drawMode = True
    EndIf
    If MouseHit(2) Then drawMode = False
    DrawImage canvas, 0, 0
    If drawMode Then Line startX, startY, MouseX(), MouseY()
    DrawScreen
Forever
Tuossa siis kun vasurilla klikataan niin viivan piirtäminen alkaa ja kun uudestaan klikataan niin uuden viivan piirto aloitetaan edellisen loppukohdasta. Hiiren oikea lopettaa piirtomoodin.

Re: Tyhmät kysymykset

Posted: Tue Jan 15, 2008 6:24 pm
by nevssons
jepulis. sitten vaan sovellan ton muihin toimintoihin

Re: Tyhmät kysymykset

Posted: Wed Jan 16, 2008 4:50 pm
by iTKEVAnAKKI
Miten saan tällä funktiolla rivitetyn lauseen rivien määrän selville?

Code: Select all

Function RowText(st$,x,y,x2,center=0)
    If x + TextWidth(st$) < x2 Then
        If center = ON Then Text (x+x2)/2-TextWidth(st$)/2,y,st$ Else Text x,y,st$
    Else
        For i = 1 To CountWords(st$)
            word$ = GetWord(st$,i)
            If x + TextWidth(sentence$) + TextWidth(word$) > x2 Then
                If center = ON Then
                    Text (x + x2)/2 - TextWidth(sentence$)/2, y, sentence$
                Else
                    Text x, y, sentence$
                EndIf
                sentence$ = ""
                y = y + TextHeight("I")
            EndIf
            sentence$ = sentence$ + word$ + " "
        Next i
        If sentence$ <> "" Then
            If center = ON Then Text (x+x2)/2-TextWidth(sentence$)/2,y,sentence$ Else Text x,y,sentence$
        EndIf
    EndIf
End Function

Re: Tyhmät kysymykset

Posted: Thu Jan 17, 2008 3:50 pm
by regalis
Miten saan järjestettyä tyypin jäsenet oikeaan järjestykseen esim. energian perusteella? Insertillä ilmeisesti hoituisi, mutta en saanut itse sitä onnistumaan.

Re: Tyhmät kysymykset

Posted: Thu Jan 17, 2008 4:10 pm
by Koodiapina
iTKEVAnAKKI wrote:Miten saan tällä funktiolla rivitetyn lauseen rivien määrän selville?
Näin:

Code: Select all

lause$ = "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum"
Repeat
    Text 0,0,"Rivejä: "+ReturnRows(lause,5,30,200)
    rowtext(lause,5,30,200)
    DrawScreen
Forever

Function ReturnRows(st$,x,y,x2)
    If x + TextWidth(st$) < x2 Then
        y = 1
    Else
        For i = 1 To CountWords(st$)
            word$ = GetWord(st$,i)
            If x + TextWidth(sentence$) + TextWidth(word$) > x2 Then
                sentence$ = ""
                y = y + TextHeight("I")
            EndIf
            sentence$ = sentence$ + word$ + " "
        Next i
    EndIf
    Return (y / TextHeight("I"))-1
EndFunction

Function RowText(st$,x,y,x2,center=0)
    If x + TextWidth(st$) < x2 Then
        If center = ON Then Text (x+x2)/2-TextWidth(st$)/2,y,st$ Else Text x,y,st$
    Else
        For i = 1 To CountWords(st$)
            word$ = GetWord(st$,i)
            If x + TextWidth(sentence$) + TextWidth(word$) > x2 Then
                If center = ON Then
                    Text (x + x2)/2 - TextWidth(sentence$)/2, y, sentence$
                Else
                    Text x, y, sentence$
                EndIf
                sentence$ = ""
                y = y + TextHeight("I")
            EndIf
            sentence$ = sentence$ + word$ + " "
        Next i
        If sentence$ <> "" Then
            If center = ON Then Text (x+x2)/2-TextWidth(sentence$)/2,y,sentence$ Else Text x,y,sentence$
        EndIf
    EndIf
End Function
Tai no jos et halua tuhlata funktioita, niin saahan tuon itse RowText funktionkin palauttamaan rivin määrän. Tuo on kuitenkin selvempää, kun ei sama funktio tee monia erillaisia toimintoja.

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 10:37 am
by beg
Mitä tekisinkään ilman tätä topikkia. Tällä kertaa 2 kysymystä:

1. Miksi tulee mav kun yritän päästä peliin alkuvalikosta?

2. Miksi tulee mav kun pelaaja yrittää lyödä? :(

Koodi:

Code: Select all

SCREEN 200,100
aloitapeli=LoadObject("media\aloitapeli.bmp")
lopetapeli=LoadObject("media\lopetapeli.bmp")
hiiri=LoadObject ("media\cursor.bmp")
ShowMouse OFF

PositionObject aloitapeli,0,30
PositionObject lopetapeli,0,-20

Repeat 
PositionObject hiiri,MouseWX(),MouseWY()

If ObjectsOverlap (hiiri,aloitapeli) And MouseHit(1) Then Goto peli
If ObjectsOverlap (hiiri,lopetapeli) And MouseHit(1) Then End 


DrawScreen 
Forever 
peli:

SCREEN 0,0,0,cbfullscreen 
FrameLimit 40

heppu=LoadObject("media\kamu.bmp",72)
tähtäys=LoadObject("media\hiiri.bmp")

huitaisu=LoadAnimObject("Media\huitaisu.bmp",38,50,0,10)
ShowObject huitaisu,OFF
ObjectRange huitaisu,30,51

PositionObject heppu,500,-400

Repeat
PositionObject tähtäys,MouseWX(),MouseWY()

If KeyDown (17) Then TranslateObject heppu,0,2
If KeyDown (30) Then TranslateObject heppu,-2,0
If KeyDown (31) Then TranslateObject heppu,0,-2
If KeyDown (32) Then TranslateObject heppu,2,0


If MouseHit(1) Then 
        
         PaintObject heppu,huitaisu 
         PlayObject pelihahmo,0,10,0.25
         EndIf
    
    
PointObject heppu,tähtäys 

    
    DrawScreen

Until EscapeKey()

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 12:02 pm
by Jonez
Kumpikin mav tulee samasta syystä: Kun menet peliin, paint hiiren 1-nappulaa. Kun lyöt, painat hiiren 1-nappulaa. Kun hiiren 1-nappulaa painaa, ajetaan koodi:

Code: Select all

PlayObject pelihahmo,0,10,0.25
Objektia pelihahmo ei ole olemassakaan.

Edit.
Suosittelen tekemään ton huitaisun tähän malliin:

Code: Select all

oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF

vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF

pelaaja = MakeObject()
PaintObject pelaaja, oikea

Repeat

    If LeftKey() Then
        PaintObject pelaaja, vasen
        PlayObject pelaaja, 2, 11
    ElseIf RightKey() Then
        PaintObject pelaaja, oikea
        PlayObject pelaaja, 2, 11
    Else
        PlayObject pelaaja, 0
    EndIf

    DrawScreen
Forever
Eli sulla on yks objekti jolle annetaan kaikki komennot: Tätä objektia (tässä objektin nimi on "pelaaja") liikutetaa, animoidaan jne. Kun halutaan vaihtaa objektin ulkonäköä (esim. tässä seisomisesta juoksuksi), se objekti maalataan uudella ulkonäöllä (paintobject pelaaja, vasen, tai esim. paintobject pelaaja, huitaisu). Kun objekti tekee jotain, käytetään komentoa PlayObject pelaaja.

Eli tarvitset:
objektin jolle tehdään kaikki mitä halutaan: Liikutus, animointi jne.
Muut objektit joilla ainoastaan maalataan tämä eka objekti.

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 12:14 pm
by simo simpanssi
Tätä on varmaan kysytty tässä ketjussa varmaan miljoona kertaa, mutta en jaksanu käydä kun yheksän sivullista läpi,(eikä vastausta löytynyt) joten kysyn nyt:
miten saa räiskintäpeliin luotua heltit, ja miten vihuja saa "spawnaamaan" tiettyyn paikkaan??(vastaus molempiin esimerkin kanssa(satun olemaan hiukan vähäjärkinen)jos mahdollista)

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 12:23 pm
by nevssons
Miks elipsi ei seuraa hiirtä?

Code: Select all

kuva = MakeImage(400, 300)
eliON = False 
elix = 0
eliy = 0
hiirix=True 
hiiriy=True 
elipsi=True 
Repeat
ristix1=MouseX() -5
ristiy1=MouseY() -5
ristix2=MouseX() +5
ristiy2=MouseY() +5
   If hiirix And hiiriy Then hiiri=True Else hiiri=False 
   If elipsi And MouseHit(1) Then eli=True Else eli=False 
   If hiiri Then 
   ShowMouse OFF
   Line ristix1,MouseY(),ristix2,MouseY()
   Line MouseX(),ristiy1,MouseX(),ristiy2
   Else
   ShowMouse ON
   EndIf 
   
      If  hiiri And eli Then
        If elion Then 
            DrawToImage kuva
            Ellipse elix, eliy, Distance (elix, eliy, MouseX(),MouseX()),Distance (elix, eliy, MouseY(),MouseY()),0 
            DrawToScreen
            elinon=True 
        EndIf 
        eliX = MouseX()
        eliY = MouseY()
        elion = True   
    EndIf
     If elinon Then 
     elion=False 
     elinon=False 
     EndIf 
    DrawImage kuva, 0, 0
    If elion Then Ellipse elix, eliy, Distance (elix, elix, MouseX(),MouseX()),Distance (eliy, eliy, MouseY(),MouseY()),0
    If MouseHit(3) Then SaveImage kuva,"images/kuva.bmp"
    DrawScreen
Forever 

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 1:30 pm
by beg
Jonez wrote:Kumpikin mav tulee samasta syystä: Kun menet peliin, paint hiiren 1-nappulaa. Kun lyöt, painat hiiren 1-nappulaa. Kun hiiren 1-nappulaa painaa, ajetaan koodi:

Code: Select all

PlayObject pelihahmo,0,10,0.25
Objektia pelihahmo ei ole olemassakaan.

Edit.
Suosittelen tekemään ton huitaisun tähän malliin:

Code: Select all

oikea=LoadAnimObject("Media\zerorun1.bmp",47,51,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF

vasen=LoadAnimObject("Media\zerorun2.bmp",47,51,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF

pelaaja = MakeObject()
PaintObject pelaaja, oikea

Repeat

    If LeftKey() Then
        PaintObject pelaaja, vasen
        PlayObject pelaaja, 2, 11
    ElseIf RightKey() Then
        PaintObject pelaaja, oikea
        PlayObject pelaaja, 2, 11
    Else
        PlayObject pelaaja, 0
    EndIf

    DrawScreen
Forever
Eli sulla on yks objekti jolle annetaan kaikki komennot: Tätä objektia (tässä objektin nimi on "pelaaja") liikutetaa, animoidaan jne. Kun halutaan vaihtaa objektin ulkonäköä (esim. tässä seisomisesta juoksuksi), se objekti maalataan uudella ulkonäöllä (paintobject pelaaja, vasen, tai esim. paintobject pelaaja, huitaisu). Kun objekti tekee jotain, käytetään komentoa PlayObject pelaaja.

Eli tarvitset:
objektin jolle tehdään kaikki mitä halutaan: Liikutus, animointi jne.
Muut objektit joilla ainoastaan maalataan tämä eka objekti.
Olipas nolo virhe. :oops: Kiitos kuitenkin!

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 1:46 pm
by BulletStorm
Nyt tuli mulle vastaan ihan uus juttu, nimittäin animaatiot. Ajattelinpa kysästä, että miten saisin aikaan suuliekin pelaajan / vihun ampuessa?

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 1:51 pm
by Harakka
Tyylikkäintä olisi varmaan tehdä kaksi kuvaa: kuva, jossa pelaaja on ase kädessä ja kuva jossa pelaaja ampuu. Ampumiskuvaan voi sitten piirtää suuliekin ja lisätä valaistukseen välähdyksen ja mahdollisesti tehdä pieniä muutoksia hahmon asentoon niin asella näyttää olevan rekyyliäkin.

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 3:29 pm
by M.R
Kuinka voi järjestää tyypin jäsenet kolmen tyyppi muttujan perusteella?Eli missä ne kolme muuttujaa on samaa niin ne ois peräkkäin.

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 5:32 pm
by tuhoojabotti
Minä toteutan suuliekin erillisellä objectilla joka vain siirretään oikeaa kohtaan siten saa dynaamisuutta kun on monta liekkikuvaa eikä aina se sama :P

Re: Tyhmät kysymykset

Posted: Sat Jan 19, 2008 11:14 pm
by -Z-
Ensimmäinen ongelmani liittyen GTA-klooniini. "Auto"(eli ukko) Tekee ohjelman käynnistyessä pyöreän käännöksen, ja lähtee kulkemaan suoraan alaspäin. Piste, jonne sen pitäisi mennä, on valitettavasti vasemmalla eikä alhaalla. Kuseeko CurvePointObjecista muokkaamani funktio, vai mikä?

Code: Select all

SCREEN 600,400
Type AMMUS
    Field obj
End Type 

FrameLimit 40

ukkoei=LoadAnimObject("Media\plrun_unarmed.png",16,16,0,7,32)
ShowObject ukkoei,OFF 
pati=LoadObject("Media\bullet.png",16)
ShowObject pati,OFF
ShowMouse OFF
map=LoadMap("media\gtatest.til","media\tilesetgta.png")
car=LoadObject("media\guy.bmp",72)
MaskObject map, 255,0,255

ClsColor cbwhite

ukko = MakeObject(32)
PaintObject ukko,ukkoei
selection=1
point=1

Repeat
    
    CloneCameraPosition ukko

    RotateObject ukko, GetAngle(ObjectX(ukko),-ObjectY(ukko),MouseWX(),-MouseWY())
    TranslateObject ukko, KeyDown(cbkeyd)*3-KeyDown(cbkeya)*3,KeyDown(cbkeyw)*3-KeyDown(cbkeys)*3
    If KeyDown(cbkeyw) Or KeyDown(cbkeys) Or KeyDown(cbkeya) Or KeyDown(cbkeyd) Then PlayObject ukko, 0,8,0.3
    If Not KeyDown(cbkeyw) Then
        If Not KeyDown(cbkeys) Then
            If Not KeyDown(cbkeya) Then
                If Not KeyDown(cbkeyd) Then PlayObject ukko, OFF
            EndIf
        EndIf
    EndIf
    
    MoveObject car,3
    
    For y=1 To MapHeight()
    For x=1 To MapWidth()
        If GetMap2(3,x,y)=point Then curvepointobject2(car,x,y,10)
        If GetMap(3,ObjectX(ukko),ObjectY(ukko))=point Then point+1
    Next x
    Next y

    If point>4 Then point=1

    If MouseDown(1) And reload=0 Then
        luoti.AMMUS = New(AMMUS)
        luoti\obj=CloneObject(pati)
        CloneObjectPosition luoti\obj,ukko           
        CloneObjectOrientation luoti\obj,ukko
        MoveObject luoti\obj,movef,mover        
        reload=gunreload
        If dual=1 Then
            luoti.AMMUS = New(AMMUS)
            luoti\obj=CloneObject(pati)
            CloneObjectPosition luoti\obj,ukko               
            CloneObjectOrientation luoti\obj,ukko
            MoveObject luoti\obj,movef,mover*-1
            reload=gunreload
        EndIf
    EndIf

    If reload>0 Then reload=reload-1

    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,12    
    Next luoti
    
    If selection=1 Then
        PaintObject ukko,ukkoei
        dmg=1
        dual=1
        movef=8
        mover=10
        gunreload=5
    EndIf
    
    DrawGame
    
    Color cbred
    Line MouseX()-5,MouseY(),MouseX()+5,MouseY()
    Line MouseX(),MouseY()+5,MouseX(),MouseY()-5
   

    DrawScreen

Until EscapeKey()

Function CurvePointObject2(_obj, x, y, _smoothness = 5)
    angle#      = ObjectAngle(_obj)
    newangle#   = GetAngle(ObjectX(_obj),ObjectY(_obj),x,y )
    angle#      = CurveAngle(newangle, angle, _smoothness)
    RotateObject _obj, angle
EndFunction