Diskuze: Animace šplhu po žebříku - jak?

Ostatní jazyky GameMaker GameMaker Animace šplhu po žebříku - jak?

Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Teď bych potřeboval pomoci s další věcí: Dělám na náročnější skákačce a dnes jsem narazil na problém při animaci šplhu po žebříku.
Mám 2 obrázky v jednom spritu, a víc jsem podle jednoho návodu na YT nastavit nedokázal. Více návodů na šplhací animaci tam nebylo.
Chci, aby se postavě při šplhu pohybovaly ruce a nohy - aby se ty 2 obrázky při šplhu, držení šipky nahoru / dolů prohazovaly.
Jinak postava mi bez problému šplhá, to jsem zvládl nastavit na pohodu, jen ta animace mi dělá problém.

Editováno 2.8.2015 10:49
 
Odpovědět 2.8.2015 10:49
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Tak nastav:

if (splhani == true) {
        sprite_index = spr_player_slphani;
}
 
Nahoru Odpovědět 5.8.2015 14:24
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Nefunguje, ale možná jsem to jen špatně pochopil.
Chápu to tak, že ,,to" se stane, bude li proměnná splhani na hodnotě true. Nějaká taková proměnná musí existovat - nastavil jsem, že proměnná climbing se nastaví na true při stlačení up a down. Při uvolnění se nastaví na false. Pak jsem do step u hráče dal ten kód od tebe (samozřejmě s mým názvem spritu a proměnné).

 
Nahoru Odpovědět 7.8.2015 16:20
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

V tom případě by to mělo fungovat, pokud jsi někde něco nenapsal špatně. Pošli sem kód.

Ps: používej tlačítko odpovědět, není tady jen tak for fun

 
Nahoru Odpovědět 10.8.2015 0:03
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Myslíš tenhle zdroják?

Information about object: o_hrac
Sprite: s_hrac1
Solid: true
Visible: true
Depth: -2
Persistent: false
Parent:
Mask:

No Physics Object
Create Event:

set variable global.ammo to 0
set variable right to true
set the sprite to s_hrac1 with subimage 0 and speed 0
set the score to 0
set the number of lives to 3
set variable global.underwater to 100
Step Event:

if relative position (0,1) is collision free for Only solid objects
      if at relative position (0,0) there is object o_voda
            set the gravity to .05 in direction 270
            if vspeed is greater than 1.5
                  set the vertical speed to 1.5
      else
            set the gravity to 0.5 in direction 270
else
      set the gravity to 0 in direction 270
if vspeed is greater than 12
      set variable vspeed to 12
if at relative position (0,0) there is object p_zebrik
      set the gravity to 0 in direction 270
      set the vertical speed to 0
      set the sprite to s_splh with subimage 0 and speed 1
If lives are equal to 0
      display message: Nemas zivoty, restartuje se uroven.
      Restart the current room
      set the number of lives to 3
      jump to the start position
      set the score to 0
      set variable global.energy to 100
if at relative position (0,0) there is not object o_voda
      set variable global.underwater relative to 0.3
      if global.underwater is greater than 100
            set variable global.underwater to 100
if global.underwater is less than 1
      set the number of lives relative to -1
      set variable global.underwater to 100
      jump to the start position
Begin Step Event:

if at relative position (0,0) there is object o_voda
      set variable global.underwater relative to -0.2
Collision Event with object o_hlina:

move in direction direction at most 12 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_podlaha:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_trava:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_podzemi:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_zed:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_podschod:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_trampolina:

if vspeed is greater than 0
      set the vertical speed to -16
Collision Event with object o_trampolina1:

if vspeed is greater than 0
      set the vertical speed to -28
Collision Event with object o_munice1:

set variable global.ammo relative to 5
for other object: destroy the instance
Collision Event with object o_nepritel:

if vspeed is greater than 0
      for other object: destroy the instance
      create a large effect of type explosion relative at (-16,-32) of  color 2631720 below objects
      set the vertical speed to -3
else
      set the number of lives relative to -1
      jump to the start position
Collision Event with object o_munice2:

set variable global.ammo relative to 10
for other object: destroy the instance
Collision Event with object o_bod1:

set the score relative to 2
for other object: destroy the instance
Collision Event with object o_bod2:

set the score relative to 4
for other object: destroy the instance
Collision Event with object o_bod3:

set the score relative to 5
for other object: destroy the instance
Collision Event with object o_bod4:

set the score relative to 8
for other object: destroy the instance
Collision Event with object o_Dangvoda:

set the number of lives relative to -1
jump to the start position
Collision Event with object o_energie:

set variable global.energy to 100
for other object: destroy the instance
if global.energy is equal to 0
      set the number of lives relative to -1
      set variable global.energy to 50
Collision Event with object o_bublina:

set variable global.underwater to 100
for other object: destroy the instance
Collision Event with object o_zivoty:

set the number of lives relative to 1
for other object: destroy the instance
Collision Event with object o_hrebiky:

set the number of lives relative to -1
jump to the start position
Collision Event with object o_tryska:

set the number of lives relative to -1
jump to the start position
Collision Event with object o_zamek1:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_zamek2:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_zamek3:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_zamek4:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Collision Event with object o_klic1:

for other object: destroy the instance
for all o_zamek1: destroy the instance
Collision Event with object o_klic2:

for other object: destroy the instance
for all o_zamek2: destroy the instance
Collision Event with object o_klic3:

for all o_zamek3: destroy the instance
for other object: destroy the instance
Collision Event with object o_klic4:

for all o_zamek4: destroy the instance
for other object: destroy the instance
Collision Event with object o_hzed:

move in direction direction at most 10 till a contact with solid objects
set the vertical speed to 0
Keyboard Event for Key:

if global.ammo is greater than 0
      if right is equal to true
            create instance of object o_strela at relative position (0,15) with speed 13 in direction 0
      if right is equal to false
            create instance of object o_strela at relative position (0,15) with speed 13 in direction 180
      set variable global.ammo relative to -1
Keyboard Event for Key:

if relative position (-4,0) is collision free for Only solid objects
      jump relative to position (-4,0)
else
      if relative position (-4,-16) is collision free for Only solid objects
            jump relative to position (-4,-16)
set the sprite to s_hrac2 with subimage 0 and speed 1
set variable right to false
Keyboard Event for Key:

if at relative position (0,0) there is object p_zebrik
      if relative position (0,-4) is collision free for Only solid objects
            jump relative to position (0,-4)
if relative position (0,1) gives a collision with Only solid objects
      set the vertical speed to -10
if at relative position (0,0) there is object o_voda
      set the vertical speed to -1
Keyboard Event for Key:

if relative position (4,0) is collision free for Only solid objects
      jump relative to position (4,0)
else
      if relative position (4,-16) is collision free for Only solid objects
            jump relative to position (4,-16)
set the sprite to s_hrac1 with subimage 0 and speed 1
set variable right to true
Keyboard Event for Key:

if at relative position (0,0) there is object p_zebrik
      if relative position (0,4) is collision free for Only solid objects
            jump relative to position (0,4)
Keyboard Event for R-key Key:

restart the game
Other Event: Outside Room:

restart the game
Key Press Event for Key:

set variable climbing to true
Key Press Event for Key:

set variable climbing to true
Key Release Event for Key:

set variable climbing to false
Key Release Event for Key:

set variable climbing to false
 
Nahoru Odpovědět 10.8.2015 9:52
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Ne myslím ten co si napsal ne informace o něm

 
Nahoru Odpovědět 10.8.2015 10:12
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Mám to přes ikonky, tak ti pošlu screeny.

if (climbing == true) {
        sprite_index = s_splh;
}

s_splh - název šplhacího spritu
climbing - název proměnné

 
Nahoru Odpovědět 10.8.2015 12:34
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

ten kód ode mě úplně samostatně

 
Nahoru Odpovědět 10.8.2015 12:53
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Ten kód od tebe mám použít úplně samostatně, tu proměnnou climbing a ty klávesové eventy stlačení a uvolnění mám všechny smazat? Pak ten kód nebude žádnou proměnnou splhani znát. Podle mě to pak bude nesmysl. Zkus mi to lépe vysvětlit..

Kód, který jsem použil tam máš.

Editováno 10.8.2015 13:02
 
Nahoru Odpovědět 10.8.2015 13:01
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Všechno to ovládání nech jak máš (nahoru, dolu) jen tu ikonu s kódem co jsem ti poslal dej ve step eventu pře první ikonu (If a position is colision...).

 
Nahoru Odpovědět 10.8.2015 13:06
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Měl jsem to pod If there is an object o_voda at a position. Takže jsem to měl špatně umístěné (špatné umístění je na tom screenu). Tak jsem to teď dal pod p_zebrik, ale hodilo mi to tohle, když jsem se přiblížil k žebříku:

___________________________________________
############################################################################################
FATAL ERROR in
action number 24
of  Step Event0
for object o_hrac:

Push :: Execution Error - Variable Get -1.climbing(100004, -1)
 at gml_Object_o_hrac_StepNormalEvent_24 (line 5) - if (climbing == true) {
############################################################################################

Něco asi dělám špatně..
p_zebrik - ,,p" tam mám protože, jsem postupoval podle návodu, kde se používal parent

Editováno 10.8.2015 15:05
 
Nahoru Odpovědět 10.8.2015 15:04
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Za 1. si vytvoř ve Create eventu proměnnou climbing = false a 2. za jsem psal ať to dáš úplně nahoru takhle:

 
Nahoru Odpovědět 10.8.2015 16:58
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Vytvořit proměnnou mě nenapadlo, tak jsem ji vytvořil. Dal jsem to nahoru ve stepu. Teď se ale proměnná nastaví pokaždé, co vyskočím. Napadlo mě tedy do těch eventů stlačení a uvolnění up a down nastavit, aby se proměnná nastavovala jen, pokud bude existovat kolize s žebříkem.
Ovšem pořád nic, asi ještě pořád něco dělám špatně.

Animace začne probíhat až, pokud vylezu na horní konec žebříku a pokud držím up. To animace normálně probíhá (jen příliš rychle, to by ale nebyl problém opravit). Při pohybu po žebříku nahoru a dolů ovšem nic.

 
Nahoru Odpovědět 10.8.2015 20:56
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Nevím jak máš řešené ovládání atp. takže ti takhle s tím moc neporadím.

Editováno 10.8.2015 20:59
 
Nahoru Odpovědět 10.8.2015 20:58
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Mohl by jsi se v rychlosti podívat na to info o objektu, co jsem ti poslal, tam to myslím zjistíš.
Používám zatím ikonky.
Chci se ale pokusit udělat vše proto, aby jsi mi mohl poradit. Proto ti sem dám pár screenů, aby jsi si je mohl někdy, až budeš mít čas (třeba zítra odpoledne, nebo za 2 dny) prohlédnout, a poradit mi.
Nemusíš hned, až budeš mít čas. Byl bych ti za to moc vděčný.

Pokud budeš ještě něco potřebovat vědět, tak ti to napíšu nebo nascreenuji.

Třeba to bude tím, že mám u hráče, nebo u žebříku zatrhnout, nebo nezatrhnout precison/separate. Jak by to bylo nejlepší zatrhnout?

 
Nahoru Odpovědět 10.8.2015 21:35
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Dej si měnění spritu u šipek doleva a doprava do podmínky, že se hrač změní na s_hrac2 a s_hrac1 (pokud jsou stejný jen otočený stačí dát ikonku na otočení spritu) jen tehdy když se nedotýká žebříku. Když to nebude fungovat tak ještě napiš.

 
Nahoru Odpovědět 10.8.2015 22:37
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Ty dva sprity stejné mám, ovšem ale nevím, jak to otočení spritu mám nastavit. Vím, že asi s ikonkou transform sprite, ale co tam pak napsat netuším. Flip vertically v mirroru nic nedělá.

Samozřejmě jsem se zkusil zeptat googla, ale on neví, co přesně chci, tak mi neporadí.

 
Nahoru Odpovědět 11.8.2015 14:20
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Musíš nastavit xscale na -1, yscale nech 1, angle nech 0 a mirror na no mirroring.

 
Nahoru Odpovědět 11.8.2015 16:14
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Dal jsem to do ,,if there is an object at a position" - p_zebrik (zatrženo ,,not") v eventu left a right. když dám do obou xscale na -1, tak se to otočí jen jednou a konec.
Když dám do jednoho -1 a do druhého 1 (jak to otočím je jedno, protože výsledek stejný a špatný) - sprite se sice otáčí, ale u toho otáčení skočí o kus doleva nebo do prava.
Ve hře mám funkční schody (- nejsem v tom GM až taková lama), když na těch schodech skočí o kus doleva, tak se postava octne ,,pod" schodem. Dá se vyjet opačným směrem, ale to ,,poskakování hráče" dělá hru nehratelnou.
Jinak ten kód od tebe mám ve stepu úplně nahoře a šplhací animace - nic.

 
Nahoru Odpovědět 11.8.2015 21:38
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Nejspíš nemáš origin spritu uprostřed. Možná by bylo lepší poslat mi do zpráv odkaz na Dropbox s tím projektem jako gmz soubor.

 
Nahoru Odpovědět 11.8.2015 22:24
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Tak to nemám, to je pravda. Teď funguje otáčení, ale šplh zatím ještě úplně ne (i když se mi zdá, že to je na dobré cestě). Když šplhám po žebříku, stále se nic neděje (jen vidím nepohybující se šplhací sprite), animace se spustí, až když odejdu od žebříku a pořád běží. Když k žebříku přijdu, tak se animace zastaví.

Poslat ti můj projekt mě také napadlo. Ale nevím, jaký .gmz soubor myslíš, já používám GM: Studio a tady je projekt ve složce, ve které jsou všechny sprity, objekty, roomky jako .gmx a samotný projekt je také .gmx

Pak se ten projekt musí asi nějak dát do toho .gmz souboru překonvertovat, nebo bych ti musel poslat celou složku (2,3 MB).

 
Nahoru Odpovědět 11.8.2015 23:24
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Projekt musíš do gm z vyexportovat. Bez nahoře vlevo do File a tam by si měl mít Export project a tam si vybereš ze to chceš do gmz.

Používej to tlačítko odpovědět!!!

Editováno 12.8.2015 8:46
 
Nahoru Odpovědět 12.8.2015 8:44
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Bohužel jsem zvyklý z ostatních deseti fór, která používám reakce házet pod vlákno do rychlé odpovědi. Pak se těžko zvyká tady na něco jiného.

Link ti posílám.

 
Nahoru Odpovědět 12.8.2015 10:28
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Tady to máš: https://www.dropbox.com/…Project2.gmz?dl=0
Musel jsem to udělat trochu jinak než jsem ti psal protože v tom máš tak trochu bordel :D (hlavně kvůli ikonám :D) ale už to funguje jak má. Možná by to chtělo si trochu srovnat hlavě jak to všechno funguje pak by si na to možná přišel sám. ;)

Editováno 12.8.2015 11:21
 
Nahoru Odpovědět 12.8.2015 11:18
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Tak moc děkuji, jsem ti moc vděčný za pomoc.
Ten meeting by mě nenapadl, nevěděl jsem si s tím rady :-( . Vše funguje jak má, až na menší drobnost :-| : Když jsem na žebříku, zmáčknu a držím left, tak se robot ze žebříku posune doleva a pořád je v šphacím spritu a běží animace, dokud nezmáčknu něco dalšího. To už myslím nic nebude, ale kdyby jsi tu drobnůstku doladil, byl bych rád.. Snad to už zvládnu, když mi poradíš, jak.. ;-)

 
Nahoru Odpovědět 12.8.2015 12:27
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Kdyby si nad tím chvilku popřemýšlel určitě by sis to udělal sám (ale proč když můžu já že :D): https://www.dropbox.com/…Project2.gmz?dl=0

Můžeš mi ticknout odpověd jako řešení. ;)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 12.8.2015 21:42
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Funguje skvěle, díky moc.
Nevím, co bych bez tebe dělal, s tímhle ,,pohybem po žebříku" jsem se trápil už 14 dnů.

Já bych tam do stepu hodil ikonku, že když objekt není na pozici, tak se změní sprite na s_hrac1. Tohle by bylo mé ,,laické" řešení. Pravděpodobně by to nefungovalo. Možná by mě napadlo i něco jiného.

Samozřejmě mám v plánu se časem naučit používat i GML kódy. ;-)

Mám i další problémy a dotazy, ale už je řeším jinde, tak tě už nebudu trápit. ;-)

 
Nahoru Odpovědět  +1 12.8.2015 22:57
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na Lukáš Hornych
Kocour Kargo:

Teď jsem narazil na jednu drobnost, kterou jsi mi asi nějak omilem přenastavil a teď mi robot střílí pořád na jednu stranu a nevím, co s tím mám dělat. Podle mě by to mělo fungovat, ale nefunguje.

 
Nahoru Odpovědět 13.8.2015 15:26
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Tak si zjisti jak si měl udělaný střílení a pouprav to ne ?

 
Nahoru Odpovědět 13.8.2015 15:47
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

On je problém v tom, že ono to je udělané úplně stejně, jak to bylo.

Nemůže na to mít vliv něco z toho, co jsi tam přidával?

Střílí to správně jen, když jsem u žebříku.

Editováno 13.8.2015 21:23
 
Nahoru Odpovědět 13.8.2015 21:21
Avatar
Lukáš Hornych
Redaktor
Avatar
Odpovídá na Kocour Kargo
Lukáš Hornych:

Jasně že to má vliv když jsem to tak trochu předělal. A jasně že to je úplně stejný když jsem to nepředělával, právě proto máš možnost si to předělat podle svého.

 
Nahoru Odpovědět 17.8.2015 21:59
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Já ale nevím, jak to mám udělat. Psal jsi mi ale, že si to mám udělat, tak jak to bylo. Ono to je, tak jak to bylo.

 
Nahoru Odpovědět 18.8.2015 0:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 33 zpráv z 33.