Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Locked
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez »

Code: Select all

Koodia
Käytinkö nyt tuota objectframea ihan oikein vai onko vika muualla? :(
Osaatko englantia hyvin? CB:ssä kun on sellainen toiminto, että yleensä se ilmoittaa minkälainen virhe on kyseessä, jos peli ei käynnisty. Kaiken lisäksi se lähes aina kertoo myös rivin millä virhe esiintyy.

Tässä tulee error:
Wrong usage of a keyword.
Keyword 'objectframe' needs to be expressed with a set of brackets at line 58.

Tarkoittaa suunnilleen: Avainsanaa käytetty väärin, avainsana 'objectframe' tarvitsee sulut (brackets) rivillä 58 (at line 58).

Niinpä hyppäsin heti riville 58 ja huomasin että se oli suoraan sanottuna päin mäntyä :) Kuten virhe kertoo, et ole käyttänyt sulkuja funkkarissa ObjectFrame. Se tarvitsee kyseisen objektin jonka frame halutaan saada selville. Ja mitä ne ObjectY(vihu1) ja ObjectX(vihu1) siellä tekevät?
Seuraavan koodin kuitenkin pitäisi toimia. En voi (tai jaksa) testata ilman mediaa.

Code: Select all

If ObjectsOverlap( heppu, vihu1 ) And ObjectFrame( huitaisu ) => 1 Then vihu1elämä - 1
Edit. Taas yksi viesti jota editoin sata kertaa...
En nyt kattonut koodiasi tarkemmin, mutta oletko varma ettei sun pitäisikin tehdä tota if-lauseketta näin:
If ObjectsOverlap( huitaisu, vihu1 ) And ObjectFrame( huitaisu ) => 1 Then vihu1elämä - 1
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
beg
Newcomer
Posts: 19
Joined: Fri Dec 14, 2007 2:08 pm

Re: Tyhmät kysymykset

Post by beg »

Jonez wrote:

Code: Select all

Koodia
Käytinkö nyt tuota objectframea ihan oikein vai onko vika muualla? :(
Osaatko englantia hyvin? CB:ssä kun on sellainen toiminto, että yleensä se ilmoittaa minkälainen virhe on kyseessä, jos peli ei käynnisty. Kaiken lisäksi se lähes aina kertoo myös rivin millä virhe esiintyy.

Tässä tulee error:
Wrong usage of a keyword.
Keyword 'objectframe' needs to be expressed with a set of brackets at line 58.

Tarkoittaa suunnilleen: Avainsanaa käytetty väärin, avainsana 'objectframe' tarvitsee sulut (brackets) rivillä 58 (at line 58).

Niinpä hyppäsin heti riville 58 ja huomasin että se oli suoraan sanottuna päin mäntyä :) Kuten virhe kertoo, et ole käyttänyt sulkuja funkkarissa ObjectFrame. Se tarvitsee kyseisen objektin jonka frame halutaan saada selville. Ja mitä ne ObjectY(vihu1) ja ObjectX(vihu1) siellä tekevät?
Seuraavan koodin kuitenkin pitäisi toimia. En voi (tai jaksa) testata ilman mediaa.

Code: Select all

If ObjectsOverlap( heppu, vihu1 ) And ObjectFrame( huitaisu ) => 1 Then vihu1elämä - 1
Edit. Taas yksi viesti jota editoin sata kertaa...
En nyt kattonut koodiasi tarkemmin, mutta oletko varma ettei sun pitäisikin tehdä tota if-lauseketta näin:
If ObjectsOverlap( huitaisu, vihu1 ) And ObjectFrame( huitaisu ) => 1 Then vihu1elämä - 1
Olisi pitänyt katsoa se "brackets" sanakirjasta. :x Taas toimii mainiosti, mutta vihun elämät ei pienene.

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





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

huitaisu=LoadAnimObject("Media\huitaisu2.bmp",150,50,0,11,72)
ShowObject huitaisu,OFF
ObjectRange huitaisu,30,51



PositionObject heppu,500,-400
PositionObject vihu1,500,-425


vihu1elämä=3

Repeat
Text  100,60,""+vihu1elämä
If vihu1elämä<1 Then PaintObject vihu1,kuollutvihu1
If ObjectsOverlap( huitaisu, vihu1 ) And ObjectFrame( huitaisu ) => 8 Then vihu1elämä - 1




PositionObject kuollutvihu1,ObjectX(vihu1),ObjectY(vihu1)
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



huitaisu:
If MouseDown(1) Then 
    PaintObject heppu,huitaisu 
    PlayObject heppu,0,10,0.40
    
Else 
    PlayObject heppu,0
EndIf 



      
    
    
PointObject heppu,tähtäys 

    
    DrawScreen

Until EscapeKey()
EDIT:

Laitan vielä tämmösen kysymyksen tähän etten täytä koko topikkia. Eli miten saisin autoja kulkemaan kartassa niin, että ne kääntyisivät aina käännöksissä sulavasti oikealle tai vasemmalle? :|

Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

beg wrote:Taas toimii mainiosti, mutta vihun elämät ei pienene.
Itseasiassa et soita lainkaan tuota "huitaisu"-animaatiota vaan ainoastaan maalaat heppu-objektin sillä.
Näin ollen muuta iffi tällaiseksi.

Code: Select all

If ObjectsOverlap( heppu, vihu1 ) And ObjectFrame( heppu) => 8 Then vihu1elämä - 1
EDIT:

Tuohon autohommaan voit soveltaa Jonezin mainiota esimerkkiä:
viewtopic.php?f=10&t=496

avuton

Re: Tyhmät kysymykset

Post by avuton »

Haluan objektin siirtyvän tilestä A tileen B kartan data-kerroksen tunnuksien avulla (esim. A = 1, B = 2)...
Aivot lyö nollaa, ja en keksi, mitä koodia tuohon nuolen osoittamaan kohtaan tulisi heittää.

Code: Select all

siirry (OMA\obj, 1, 2, "(E)nter the tent") 'funktio in action

'----------------------------------------------------------------------'

Function siirry (obj, tile_mistä, tile_mihin, txt$) 'funktio
  
    If GetMap (3, ObjectX(obj), ObjectY(obj)) = tile_mistä Then 
        Text 100, 420, txt$
            If KeyDown(cbKeyE) Then 
                'aseta pelaaja tileen 2 (data-kerroksen mukaan) <---------------------
            EndIf
    EndIf
  
End Function
tuhoojabotti
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 3:53 pm
Location: Suomi, Finland
Contact:

Re: Tyhmät kysymykset

Post by tuhoojabotti »

käy kartta läpi joka tile ja kun tärppää data kerroksessa niin muuta koordinaatti pikselikoordinaatiksi ja positionobjectii :P en itse keksinyt muutakaan
Imagedev.tuhoojabotti.com — “Programmer (noun): An organism that turns caffeine into code.”
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Post by Myst!c »

Jos haluan räiskintäpeliin semmoisen liikkumisen että tietty
ukko ylänuolinäppäimestä menee eteenpäin ja alanuoli-
näppäimestä alas MUTTA, pelissä on myös hiiri ja se voi
liikkua ruudulla vapaasti ja ukko olisi pointobjectilla kokoajan
päin hiirtä, mutta tämäpä ei onnistu koska hiiri on image
ja showmouse hommat sun muut eivät toimi jos lataan hiiren
objektina. Eikä cloneobjectpositionillakaan voi koska hiiri ei
edelleen toimi objektina. :) Toivottavasti joku ymmärsi
ongelmani. :)
Kiitokset etukäteen!

EDIT: Eikä mielellään koodia vaan tapa jolla se toteutetaan. :)
Pieni koodinpätkä ei tosin haittaa.
Every Legend Has A Start!
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Tyhmät kysymykset

Post by Harakka »

Eli ukko liikkuu näppäimistä ilmansuuntiin ja katsoo hiireen? Siinä tapauksessa toteuta liikkuminen translateobjectilla ja laita ukkeli osoittamaan hiireen seuraavalla koodinpätkällä:

Code: Select all

RotateObject ukko, -GetAngle(ObjectX(ukko), ObjectY(ukko), MouseWX(), MouseWY())
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Post by Myst!c »

Kiitos paljon. :) Toimii kuin unelma, nyt toteuttamaan seuraavaa
juttua toivoen ilman ongelmia. :P
Every Legend Has A Start!
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Re: Tyhmät kysymykset

Post by Myst!c »

Tuotaa, tähtäimen seuraaminen onnistuu mutta jos en liikuta
tähtäintä ja ammun niin huomaa että ukko on täsmälleen täht-
äimen vasempaan yläkulmaan päin, kokeilin koon muutoksia
ja sun muita. :/ Jos joku viitsisi auttaa niin kiitos.
Every Legend Has A Start!
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

Myst!c wrote:Tuotaa, tähtäimen seuraaminen onnistuu mutta jos en liikuta
tähtäintä ja ammun niin huomaa että ukko on täsmälleen täht-
äimen vasempaan yläkulmaan päin, kokeilin koon muutoksia
ja sun muita. :/ Jos joku viitsisi auttaa niin kiitos.
Ilmeisesti piirrät tähtäimen DrawImage:lla.
Toisin kuin objekteilla joilla piirtopiste on kuvan keskellä, kuvat piirretään annettuihin koordinaatteihin alkaen vasemmasta yläkulmasta.
Myös kuvan piirtopisteen voi muuttaa HotSpot-komennolla ja kuvan keskelle se onnistuu vaikka näin:

Code: Select all

HotSpot tähtäin, ImageWidth(tähtäin) / 2, ImageHeight(tähtäin) / 2
Ei siis missään loopissa vaan latauksen jälkeen.
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Re: Tyhmät kysymykset

Post by Myst!c »

Öm ensiksi, onkohan minulla vanhempi cb tai jotain koska en ole nähnyt yhtään
tuon vastaista komentoa siellä. :S Ja sitten että paukun menosuunta ei edelleenkään
vaihtunut, se ampuu tähtäimen vasempaan ylänurkkaan edelleen. :/
Every Legend Has A Start!
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

Myst!c wrote:Öm ensiksi, onkohan minulla vanhempi cb tai jotain koska en ole nähnyt yhtään
tuon vastaista komentoa siellä. :S Ja sitten että paukun menosuunta ei edelleenkään
vaihtunut, se ampuu tähtäimen vasempaan ylänurkkaan edelleen. :/
Ööö, siis mitä komentoa? HotSpot vai joku muu?

Tässä yksinkertainen koodinpätkä joka havainnollistaa tuota hotspottia.
Auton pitäisi piirtyä hiirikursorin alle siten että kursori on auton keskellä.
Kokeile seuraavaksi niin että kommentoit tuon HotSpot-rivin ja ajat koodia uudestaan. Huomaat eron.
Jos ei vieläkään tyimi niin teet jotain väärin tai sitten puhumme eri asioista. Jos vaikka voisit laittaa jotain koodinpätkää (ammuksen lähtösuunnan asetus ja tähtäimen piirto).

Code: Select all

img = LoadImage("media/car.bmp")
HotSpot img, ImageWidth(img) / 2, ImageHeight(img) / 2
Repeat
    DrawImage img, MouseX(), MouseY()
    DrawScreen
Forever
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Re: Tyhmät kysymykset

Post by Myst!c »

Ei vieläkään. :S Koodia:

Code: Select all

Type AMMUS 
    Field obj 
End Type 

Ukko = LoadObject("Media\guy3.bmp", 72)

pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

hiiri = LoadImage("media/tahtain.bmp")
MaskImage hiiri, cbmagenta 
ShowMouse hiiri
HotSpot hiiri, ImageWidth(hiiri) / 2, ImageHeight(hiiri) / 2

Repeat 

Drawgame

    hiiriX=MouseX()
    hiiriY=MouseY()

   If  MouseHit(1) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 
        luoti\obj=CloneObject(pati) 

        CloneObjectPosition luoti\obj,ukko                

        CloneObjectOrientation luoti\obj,ukko    
        MoveObject luoti\obj, 6, 10.5
        reload=5    
    EndIf

    If reload>0 Then reload=reload-1


    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        
Next luoti

    DrawImage hiiri, MouseX(), MouseY()

RotateObject ukko, -GetAngle(ObjectX(ukko), ObjectY(ukko), MouseWX(), MouseWY())

Drawscreen

Forever
Koodi on kauhean näköistä ja niin eespäin.

EDIT: Ja niin että onko mitään muita ratkaisuja koska haluaisin
ymmärtää itsekkin jotain, en osaa käyttää hotspottia, ensimmäinen
kerta ku näen vastaavanlaisen komennon. :S
Every Legend Has A Start!
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

Tuossa pätkässähän ei ukkoa käännetä lainkaan mutta se on toinen juttu se.
Itse alkuperäiseen ongelmaan:
Ei oltu ihan samalla aaltopituudella tuossa aiemmin mutta tuo koodi selvensi asiaa.
Kun luot ammuksen, laitat sen ensin ukon positioon ja asentoon. Sitten siirrät ammusta myös sivusuunnassa (aseen piipun kohdalle tietenkin) .
Ammuksen suunta on edelleen sama kuin ukkelin rintamasuunta joten se menee kohteesta sen verran ohi kuin siirsit sitä sivuttain.
Tuossa osa koodista ja kommentoin ne kohdat joita muutin.

Code: Select all

    // KÄÄNNÄ UKKO KOHTI HIIRTÄ
    RotateObject ukko, -GetAngle(ObjectX(ukko), ObjectY(ukko), MouseWX(), MouseWY())
    
    If  MouseHit(1) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 
        luoti\obj=CloneObject(pati) 

        CloneObjectPosition luoti\obj,ukko                

        // TÄTÄ EI TARVITA
        //CloneObjectOrientation luoti\obj,ukko  
        MoveObject luoti\obj, 6, 10.5
        // KÄÄNNÄ AMMUS KOHTI HIIRTÄ
        RotateObject luoti\obj, -GetAngle(ObjectX(luoti\obj), ObjectY(luoti\obj), MouseWX(), MouseWY())
        reload=5    
    EndIf
Myst!c wrote:Koodi on kauhean näköistä ja niin eespäin.
Ihan siedettäväähän tuo. Paljon pahempaakin on nähty :D
EDIT: Ja niin että onko mitään muita ratkaisuja koska haluaisin
ymmärtää itsekkin jotain, en osaa käyttää hotspottia, ensimmäinen
kerta ku näen vastaavanlaisen komennon. :S
Katso helpistä HotSpotin ohje. Se on aika simppeli juttu.
Toinen mahdollisuus piirtää kuva jonkin tietyn pisteen keskelle olisi:

Code: Select all

DrawImage img, x - ImageWidth(img) / 2, y - ImageHeight(img) / 2
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Re: Tyhmät kysymykset

Post by Myst!c »

Noniin alkoi toimimaan mutta huomasin
kinkkisen ongelman. :D Pati ei lähde enää
piipusta vaan se lähtee mistä sattuu, jos
katson ylös niin se melkein lähtee piipusta
ja kun katson alas niin se lähtee vasemmasta
kädestä. :S Ja loput voit päätelläkkin itse
mihin ne kääntyy kun katson muualle. :P
Every Legend Has A Start!
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

Myst!c wrote:Noniin alkoi toimimaan mutta huomasin
kinkkisen ongelman. :D
Sori, mun moka :oops:
Tuo // TÄTÄ EI TARVITA juttu eli CloneObjectOrientation on sittenkin tarpeellinen.
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Re: Tyhmät kysymykset

Post by Myst!c »

Ei voi olla totta... Ongelma ei juurikaan muuttunut.
Sama juttu että ei lähde piipusta. :/
Every Legend Has A Start!
beg
Newcomer
Posts: 19
Joined: Fri Dec 14, 2007 2:08 pm

Re: Tyhmät kysymykset

Post by beg »

Marcoder wrote:
beg wrote:Taas toimii mainiosti, mutta vihun elämät ei pienene.
Itseasiassa et soita lainkaan tuota "huitaisu"-animaatiota vaan ainoastaan maalaat heppu-objektin sillä.
Näin ollen muuta iffi tällaiseksi.

Code: Select all

If ObjectsOverlap( heppu, vihu1 ) And ObjectFrame( heppu) => 8 Then vihu1elämä - 1
EDIT:

Tuohon autohommaan voit soveltaa Jonezin mainiota esimerkkiä:
viewtopic.php?f=10&t=496

Mitenhän saisin vihun vielä menettämään vain yhden elämän per huitaisu ja nytkin se menettää elämää vain kun pelaaja koskettaa sitä? :|
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: Tyhmät kysymykset

Post by Marcoder »

Laitetaan vielä koko koodi jolla ainakin toimii. Mediat muutettu niin että toimii suoraan copypastettuna cb:ssä.

Code: Select all

Type AMMUS 
    Field obj 
End Type 

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

pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF

hiiri = LoadImage("media/target.bmp")
//MaskImage hiiri, cbmagenta 
ShowMouse hiiri
HotSpot hiiri, ImageWidth(hiiri) / 2, ImageHeight(hiiri) / 2

Repeat 

Drawgame

    hiiriX=MouseX()
    hiiriY=MouseY()

    // KÄÄNNÄ UKKO KOHTI HIIRTÄ
    RotateObject ukko, -GetAngle(ObjectX(ukko), ObjectY(ukko), MouseWX(), MouseWY())
    
    If  MouseHit(1) And reload=0 Then    
        luoti.AMMUS = New(AMMUS) 
        luoti\obj=CloneObject(pati) 

        CloneObjectPosition luoti\obj,ukko                

        CloneObjectOrientation luoti\obj,ukko  
        MoveObject luoti\obj, 6, 10.5
        // KÄÄNNÄ AMMUS KOHTI HIIRTÄ
        RotateObject luoti\obj, -GetAngle(ObjectX(luoti\obj), ObjectY(luoti\obj), MouseWX(), MouseWY())
        reload=5    
    EndIf


    If reload>0 Then reload=reload-1


    For luoti.AMMUS = Each AMMUS
        MoveObject luoti\obj,6
        
Next luoti

    DrawImage hiiri, MouseX(), MouseY()


Drawscreen

Forever
Myst!c
Advanced Member
Posts: 259
Joined: Fri Dec 21, 2007 11:49 am
Location: Kemi

Re: Tyhmät kysymykset

Post by Myst!c »

Kiitos! :) Koodisi toimii ja nyt vain katsomaan
mikä minun koodissani oli väärin xD

EDIT: Haa, minulla oli patin liikutus ja patin
kulman määrittäminen ukon kanssa väärinpäin,
vaihdoin niiden paikkaa ja alkoi toimimaan. :)
Every Legend Has A Start!
Locked