Diskuze: Bugy ve hře - jen někdy - nemožnost přiblížit se ke zdi, zastřelit nepřitele
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 13 zpráv z 13.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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?
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áš.
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řelitelnosti" 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ě..
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.
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));
############################################################################################
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áš.
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í:
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.
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?
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..
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š.
Zobrazeno 13 zpráv z 13.