Diskuze: Bugy ve hře - jen někdy - nemožnost přiblížit se ke zdi, zastřelit nepřitele

Ostatní jazyky GameMaker GameMaker Bugy ve hře - jen někdy - nemožnost přiblížit se ke zdi, zastřelit nepřitele

Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Už mám zase nějaký problém :(
Zjistil jsem, že mám ve hře bugy, které se projevují jen někdy a jen v některých částech roomky.
Konkrétně se nemohu úplně přiblížit ke zdi (jen ,,někdy" a ,,někde") což má za následek např. nemožnost prolezení úzkou šachtou po žebříku (viz. obrázky)
Pak ještě někdy není možno zastřelit nepřítele.
Mám nastaveno v Create u nepřítele nastavit proměnnou OppHP na 3, při kolizi se střelou na -1 relativně. Pokud je proměnná na nule, nepřítel zmizí a vytvoří se efekt.
Ovšem někdy nezmizí a mohu do něho vystřelit klidně 100x :'(
Nepřítele mám jednoho - jeden objekt, který mám v roomce zatím 2x. Musím mít na každého nepřítele v roomce zvláštní objekt a zvláštní proměnnou (např. Opp1HP, Opp2HP, Opp3HP,...)? Jeden nepřítel zastřelit jde a ten druhý ne.

 
Odpovědět 2.8.2015 21:02
Avatar
TomBen
Redaktor
Avatar
TomBen:

To jsou typické průšvihy, když máš špatně ošetřené kolize.
Musíš přemýšlet u toho, co děláš a průběžně kontrolovat funkčnost.

a/ zkontroluj si u každého sprite, kde má střed a kde má kolizní masku ( zapnout precision u všeho není správné řešení )
b/ uvědom si, že pokud se něco pohybuje rychlostí víc než 1, tak to ve skutečnosti poskakuje o několik pixelů za step. Klidně ti to pak proletí skrz nepřítele, aniž by cokoli zasáhlo.
c/ nemusíš mít na každého nepřítele sólo objekt. Jen pak v kolizích místo nepritel.zivoty-- používáš other.zivoty--. Slovo other zastupuje kolidující instanci.
d/ když se něco chová divně a problém může být ve více věcech, napiš si klávesový event, který ti přímo spustí určitou činnost, abys vyfiltroval ostatní možnosti. Např. v nepříteli dáš po stisku K zivoty=0. A zkusíš jestli mu to umírání jde. Pokud při "K" zmizí, tak mu asi střela nebere životy nebo mu jich nebere dost.

Nahoru Odpovědět  +1 2.8.2015 21:46
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Neměl jsem dříve čas se na to podívat.
a/ Střed (,,origin") mám u všech objektů na x0 y0. V těch kolizích u objektů se moc nevyznám - nevím, kdy a co zapnout. Je u hráče lepší dát automatic, nebo full image, co pak u solid objektů (zdí)? U čeho mám tedy dát precision?
b/ To si uvědomuji. Platí ale, že střela nepřítele někdy zasáhne, a někdy ne? Nebo vždy zasáhne např. 1 nepřítele a toho druhého ne, a zasáhne až v druhém pokusu, poté, co restartuji hru? V té hře, kdy se druhého nepřítele zastřelit nepodaří třemi střelami (jak to jde u toho 1. a jak to je nastavené) tak do toho druhého těch střel mohu vypálit i 100 a nechcípne. Takže je i možné, že by ho ani jedna z těch 100 střel nezasáhla? Někdy jdou zastřelit oba v jedné hře bez restartu.
c/ Mám to nastavené v ikonkách. Takže proměnná s názvem OppHP v creatu u nepřítele se nastaví na 3, když bude na nule, chcípne. U objektu střela, do kolize s nepřítelem nastavím, že proměnná s názvem other.OppHP se nastaví na -1 relativně. - Chápu to správně?
d/ Díky za radu, zkusím, ale zmizí mi u toho oba nepřátelé a mám v plánu jich do roomky dát i víc. Nebylo by tohle použitelné, kdyby byl jen jeden?

Editováno 7.8.2015 16:49
 
Nahoru Odpovědět 7.8.2015 16:48
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kocour Kargo
TomBen:

Kolizní masky určují, která část obrázku je aktivní pro kontakt a která je "jen" obrázek. Například, když máš okolo postavičky auru a nechceš, aby se dotek nepřítele počítal už na kraji té aury, tak potřebuješ masku nastavit. Maska je v editoru vidět, tak si to prostě vyzkoušej mimo aktivní projekt. Zkus si plnou masku, prázdnou, ručně zvolenou a myslím, že to bude jasné.

Střed spritu (origin) určuje, odkud se sprite začne kreslit. Defaultně je x,y objektu rovno origin spritu.

Nezastřelitelnost může být více věcmi. Ty jsi ten, co má zdroják, ty musíš hledat. :-)
Teď, když čtu dál, tak mě napadlo...že ty testuješ, jestli je OppHP rovno nula? To by nebyl dobrý nápad. Uvědom si, že kolize taky může trvat několik snímků a pak se OppHP sníží pod nulu. Tzn. musíš testovat menší nebo rovno.

Po pravdě řečeno, nestává se mi, že by jedna instance dělala něco, co jiná ne a nebyl to záměr. :-) Ikony jsou na to trochu pitomé. V gml máš show_debug_message, která ti přímo vypíše proměnnou. Taky dělávám, že si nechám laděním ovlivnit jen instanci, která je nejbližší poloze myši. Takže na co ukážu, to se ohlídá. Zkus třeba to show_debug_message do klávesového eventu. Přibližně takto:

show_debug_message(string(id)+' Zivoty: '+string(OppHP));

Vypíše ti sice všechny instance, ale s unikátním číslováním. Takže je rozeznáš.

Nahoru Odpovědět 7.8.2015 22:25
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kocour Kargo
Člen
Avatar
Odpovídá na TomBen
Kocour Kargo:

Ty kolizní masky jsem použil u žebříku, když jsem nechtěl, aby se změnil sprite na šplhací hned, co se s postavou přiblížím jen na okraj žebříku, ale až budu stát uprostřed před žebříkem. Nechápu ale, jaký je rozdíl mezi Automatic a Full image. Jak by se s tím dal vyřešit můj problém ,,nezastřelitel­nosti" nepřítele?

Ptal jsem se, u čeho nastavit precision, když jsi mi poradil, že není nejlepší ho u všeho zapnout.

Jestli chápu správně, tak s tím originem můj problém vyřešen být nemůže a proto s originem nic delat nemusím. Co znamená jsem věděl.

Tady tě dost nechápu: Píšeš, že není dobrý nápad testovat, jestli není rovno 0. Na konci odstavce píšeš, že musím testovat menší, nebo rovno.
Nastavil jsem tedy testování menší hodnoty, než je 0. zdá se mi, že když jsem tam podle tebe dal other.OppHP, tak se už bude dařit zastřelit všechny nepřátele.

Vytvořil jsem objekt o_debug, do klávesového eventu D jsem hodil skript, s tím kódem od tebe a dal jsem ho do roomky - po zmáčknutí ,,D" mi to hodí FATAL ERROR. Něco je asi špatně..

 
Nahoru Odpovědět 8.8.2015 0:12
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kocour Kargo
TomBen:

Tahle bychom si psali do soudného dne. Pošli zdroják, já se podívám a když budu mít čas, tak ti zjistím, proč nejde zabít robota č2. Jinak, když se ti objeví error, musíš se podívat CO píše, obvykle se z něj dá rovnou vyčíst, co ho způsobilo.

Nahoru Odpovědět 8.8.2015 10:35
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Nevím, kde ten zdroják najdu, zatím jsem ho nikdy nepotřeboval.

Myslím, že ta tvá rada s tím other. ... a s menší hodnotou než je 0 zabrala, ale zdroják rád pošlu, jestli tam nemám náhodou více chyb.

Error si přečti, já z něho zjistím jen to, co konkrétně způsobilo pád hry (ten klávesový event), ale jak to opravit se z toho v tomto případě podle mě zjistit nedá, jelikož ten kód vidím po prvé.

___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Keyboard Event for D-key Key
for object o_debug:

Push :: Execution Error - Variable Get -1.OppHP(100006, -1)
 at gml_Object_o_debug_Key_D_1 (line 1) - show_debug_message(string(id)+' Zivoty: '+string(OppHP));
############################################################################################
Editováno 8.8.2015 13:28
 
Nahoru Odpovědět 8.8.2015 13:25
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kocour Kargo
TomBen:

:D Píše se tam, že jsi ten kód nacpal do objektu o_debug místo do zmiňovaného nepřítele.

Když chce někdo v Game Makeru zdroják, bývá nejlépe poslat exportovaný projekt. Jen u velmi malých a specifických věcí stačí výpis skriptu nebo obsah eventu. Ale pokud už to nedělá, tak mi to neposílej. Nebudu ti hledat VŠECHNY CHYBY. Tolik peněz nemáš. :-)

Nahoru Odpovědět 9.8.2015 0:59
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Nepsal jsi mi, že mám ten kód dát do nepřítele. Tak jsem to nemohl vědět.
O tom objektu o_debug jsem, ti psal, takže jsi mi mohl napsat, že to je blbost. Pak se nemusíš divit, že jsem to nacpal tam..

Tím zdrojákem myslíš ,,information about object", což je u každého objektu?

Pak bych se ještě zeptal na pár drobností:

  1. U čeho je lepší nastavit precision?
  2. Jaký je rozdíl mezi ,,automatic" a ,,full image"?
  3. Tady tě dost nechápu: Píšeš, že není dobrý nápad testovat, jestli je rovno 0. Na konci odstavce píšeš, že musím testovat menší, nebo rovno. Proč, přepsal jsi se?
  4. Pak něco, na co jsem se zatím neptal: Když nemám životy - jsou na 0, tak se restartuje roomka, ale když vezmu bod a přičte se skóre, tak po restartu tam ten bod už není. Jak nastavím, aby se s restartem roomky objevily body, které jsem již vzal?
 
Nahoru Odpovědět 9.8.2015 20:16
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kocour Kargo
TomBen:

Co kdybys trochu použil vlastní hlavu? Je tady spousta návodů, jak co dělat a některé jsem psal i já osobně. Prostuduj si alespoň základy. Jestli myslíš, že uděláš hru z toho, co ti napíšu do odpovědi na fóru, tak jsi zatraceně na omylu. Nebudu ti odpovídat, dokud neprojevíš vlastní snahu.

Nahoru Odpovědět 10.8.2015 0:15
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Bohužel, ale ať hledám, jak hledám, tak tady na fóru nemohu najít návod, který by mi poradil, u čeho je lepší nastavit precision, a u čeho ne. Našel jsem tam např. na image a sprite editor.
Přitom ta otázka - ,,U čeho je lepší nastavit precision" nezní tak složitě. Nezabilo by tě poradit mi, jestli mám nastavit precision nebo separate např. u hráče nebo solid objektů - zdí.

Nevím, jak budu v návodech hledat to, na co jsem se ptal v bodě 4 - to mám číst celý návod na tvorbu hry, když mě zajímá jen jedna věc - jak nastavit to restartování?

Když už nic více, tak mi můžeš, alespoň, prosím, sem nahodit návody, ve kterých tyhle dvě věci pochopím?

Editováno 10.8.2015 14:46
 
Nahoru Odpovědět 10.8.2015 14:45
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Kocour Kargo
TomBen:

Nenacházíš odpovědi, protože kladeš úplně špatné otázky. A ano, přečti si nějaké návody ( fakt úplně celé ) než se začneš pouštět do nějaké tvorby. To, že v Game Makeru někdo, kdo nic neumí, vytvoří úžasnou hru, je mýtus. Můžeš začít s těmi, co jsou v kapitole Základy tady na itn: http://www.itnetwork.cz/…aker/zaklady

PS: jakmile jednou pochopíš, co precision znamená, nebudeš se muset pokaždé ptát, jestli ho použít. Snad toho po tobě nechci tak moc..

Nahoru Odpovědět  ±0 10.8.2015 17:39
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kocour Kargo
Člen
Avatar
Kocour Kargo:

Tak moc díky, že se mi snažíš pomoct. :'( Samozřejmě, mám strašně moc času, tak to ani nebude takový problém - tohle je bohužel jen ironie.

Tak potom nechápu, na co tu vlastně je tohle fórum, klidně se to může jmenovat ,, velká kniha návodů"
když mi tu ani poradit nechceš.

Editováno 10.8.2015 20:29
 
Nahoru Odpovědět  ±0 10.8.2015 20:27
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 13 zpráv z 13.