Kimpoaminen/pomppaus

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Kimpoaminen/pomppaus

Post by Sly_Jack0 »

Okei, eli miten saan objektin pomppaamaan lattiasta ja liikkumaan samalla vähän eteenpäin, eli siis pomppimaan eteenpäin ja miten saan sen myös kimpoamaan takaisin seinästä kun sellainen tulee vastaan? Pähkinänkuoressa: objekti pitäisi siis saada pomppimaan edestakaisin ruudulla...

Kiitos jo näin etukäteen!
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Kimpoaminen/pomppaus

Post by Harakka »

Objektia liikutaan sivusuunnassa aina muuttujan xplus verran. Jos törmätän seinään, xplus kerotaan miinus yhdellä. Kun painetaan oikeaa nuolta, xplussaan lisätään vaikka 0.1 tai muu pieni määrä (pehmeä kiihtyminen) ja vastaavasti vasemmalla nuolella vähennetään.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Kimpoaminen/pomppaus

Post by Sly_Jack0 »

Selvä, mutta miten saan itse pomppimisen hoidettua kun en käytä tilekarttoja niin en voi käyttää JumpObject()-funktiota. Mulla on siis kuva taustalla ja objeckti pitäisi saada tietyssä kohtaa esim. if objecty(obj)=300 then...
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Kimpoaminen/pomppaus

Post by valscion »

Onko tarkoituksena tehdä sellainen liikkuminen minkä Harakka mainitsisi (eli objekti liikkuisi vaikkei nuolta painettaisikaan) vaiko sellainen, jossa objekti on paikallaan ellei näppäintä paineta tai hiirtä liikuteta?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Kimpoaminen/pomppaus

Post by Sly_Jack0 »

objektin olisi siis tarkoitus liikkua ilman että nuolta painetaan.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Kimpoaminen/pomppaus

Post by valscion »

Sly_Jack0 wrote:objektin olisi siis tarkoitus liikkua ilman että nuolta painetaan.
Selvä homma. Odotappas max. 10min niin oon editoinut tähän viestiin kyseisen koodin.
EDIT:

Sieltä tulikin sitten paljon parempi koodi, käytä sitä (alla oleva siis)

Last edited by valscion on Wed Dec 12, 2007 8:14 pm, edited 2 times in total.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Kimpoaminen/pomppaus

Post by Harakka »

Esimerkkikoodi:

Code: Select all

SCREEN 800,600

lehma = LoadObject("media/cow.bmp")

VASEN_LAITA = -ScreenWidth()/2 + ObjectSizeX(lehma)/2 'LEHMÄ TÖRMÄÄ SEN REUNASTA, EI KESKELTÄ
OIKEA_LAITA = ScreenWidth()/2 - ObjectSizeX(lehma)/2

YLALAITA = ScreenHeight()/2 - ObjectSizeY(lehma)/2
ALALAITA = -ScreenHeight()/2 + ObjectSizeY(lehma)/2

Const MAXNOPEUS     = 15    'NOPEUS RAJOITETAAN TÄHÄN
Const HIDASTUS#     = 0.98  'KERROIN, JOLLA NOPEUS HIDASTUU JATKUVASTI (1 = EI HIDASTUMISTA)
Const KIIHTYVYYS#   = 0.2   'KUINKA PALJON VAUHTI KIIHTYY NÄPPÄINTÄ PAINETTAESSA

Dim xplus#
Dim yplus#

Repeat
    If ObjectX(lehma) < VASEN_LAITA Or ObjectX(lehma) > OIKEA_LAITA Then
        xplus = -xplus
    EndIf
    
    If ObjectY(lehma) > YLALAITA Or ObjectY(lehma) < ALALAITA Then
        yplus = -yplus

        //SEURAAVALLA PÄTKÄLLÄ ESTETÄÄN JUMIIN JÄÄMINEN
        Repeat
            If ObjectY(lehma) > YLALAITA Then
                TranslateObject lehma,0,-1
            ElseIf ObjectY(lehma) < ALALAITA Then
                TranslateObject lehma,0,1
            EndIf
        Until ObjectY(lehma) < YLALAITA And ObjectY(lehma) > ALALAITA
    EndIf

    If RightKey() Or LeftKey() Or UpKey() Or DownKey() Then 'JOS NÄPPÄINTÄ PAINETAAN
        xplus = xplus + RightKey()*KIIHTYVYYS - LeftKey()*KIIHTYVYYS 'KIIHDYTYS
        yplus = yplus + UpKey()*KIIHTYVYYS - DownKey()*KIIHTYVYYS
        
        xplus = Max(-MAXNOPEUS,Min(MAXNOPEUS,xplus))    'NOPEUKSIEN RAJOITUS                
        yplus = Max(-MAXNOPEUS,Min(MAXNOPEUS,yplus))
    Else    
        xplus = xplus*HIDASTUS                          'JOS EI LIIKUTA, HIDASTUU
        yplus = yplus*HIDASTUS
    EndIf
    
    TranslateObject lehma,xplus,yplus                   'SIIRRETÄÄN LEHMÄÄ
    
    DrawScreen
Forever
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Kimpoaminen/pomppaus

Post by valscion »

Suosittelisin vielä käyttämään FrameLimit komentoa rajoittamaan pelinopeutta koodin alussa...
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Kimpoaminen/pomppaus

Post by Sly_Jack0 »

okei... en ole mikään mestari tässä hommassa joten osaa oikein soveltaa tuota, mutta pitäisi saada Bubble Trouble -pelin tyylinen pomppiminen. linnki: http://www.miniclip.com/games/bubble-trouble/en/
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: Kimpoaminen/pomppaus

Post by Harakka »

Ollaanpa sitä vaativia. Lisäsin koodiin painovoiman.

Code: Select all

FrameLimit 60
SCREEN 800,600

lehma = LoadObject("media/cow.bmp")

VASEN_LAITA = -ScreenWidth()/2 + ObjectSizeX(lehma)/2 'LEHMÄ TÖRMÄÄ SEN REUNASTA, EI KESKELTÄ
OIKEA_LAITA = ScreenWidth()/2 - ObjectSizeX(lehma)/2

YLALAITA = ScreenHeight()/2 - ObjectSizeY(lehma)/2
ALALAITA = -ScreenHeight()/2 + ObjectSizeY(lehma)/2

Const MAXNOPEUS_X#  = 8.0   'NOPEUS SIVUSUUNNASSA RAJOITETAAN TÄHÄN
Const MAXNOPEUS_Y#  = 20.0  'NOPEUS PYSTYSUUNNASSA RAJOITETAAN TÄHÄN
Const HIDASTUS#     = 1.00  'KERROIN, JOLLA NOPEUS HIDASTUU JATKUVASTI (1 = EI HIDASTUMISTA)
Const KIIHTYVYYS#   = 0.2   'KUINKA PALJON VAUHTI KIIHTYY NÄPPÄINTÄ PAINETTAESSA
Const PAINOVOIMA#   = 0.4

Dim xplus#
Dim yplus#

PositionObject lehma,Rand(VASEN_LAITA,OIKEA_LAITA),Rand(ALALAITA,YLALAITA)

Repeat
    If ObjectX(lehma) < VASEN_LAITA Or ObjectX(lehma) > OIKEA_LAITA Then
        xplus = -xplus
    EndIf
    
    If ObjectY(lehma) > YLALAITA Or ObjectY(lehma) < ALALAITA Then
        yplus = -yplus

        //SEURAAVALLA PÄTKÄLLÄ ESTETÄÄN JUMIIN JÄÄMINEN
        Repeat
            If ObjectY(lehma) > YLALAITA Then
                TranslateObject lehma,0,-1
            ElseIf ObjectY(lehma) < ALALAITA Then
                TranslateObject lehma,0,1
            EndIf
        Until ObjectY(lehma) < YLALAITA And ObjectY(lehma) > ALALAITA
    EndIf

    If RightKey() Or LeftKey() Or UpKey() Or DownKey() Then 'JOS NÄPPÄINTÄ PAINETAAN
        xplus = xplus + RightKey()*KIIHTYVYYS - LeftKey()*KIIHTYVYYS 'KIIHDYTYS
        
        //SEURAAVA RIVI ON KOMMENTOITU, KOSKA TÄSSÄ ESIMERKISSÄ EI VOI KONTROLLOIDA PYSTYSUUNTAISTA VAUHTIA
        'yplus = yplus + UpKey()*KIIHTYVYYS - DownKey()*KIIHTYVYYS
        
        xplus = Max(-MAXNOPEUS_X,Min(MAXNOPEUS_X,xplus))    'NOPEUKSIEN RAJOITUS                
        yplus = Max(-MAXNOPEUS_y,Min(MAXNOPEUS_Y,yplus))    
    Else    
        xplus = xplus*HIDASTUS                          'JOS EI LIIKUTA, HIDASTUU
        yplus = yplus*HIDASTUS
    EndIf
    
    yplus - painovoima
    
    TranslateObject lehma,xplus,yplus                   'SIIRRETÄÄN LEHMÄÄ
    
    DrawScreen
Forever
Ajattelitko tehdä jotain itsekin?
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Kimpoaminen/pomppaus

Post by Sly_Jack0 »

Kiitoksia, tämä auttoi paljon...
Post Reply