Diskuze: Deaktivování objektů
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 22 zpráv z 22.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.


Deaktivace je dobrá pro objekty, které je třeba kompletně vypnout.
Např. když je mnoho objektů úplně mimo zobrazené okno, nemají nijak
reagovat ani nic počítat. K ničemu jinému se deaktivace moc nehodí.
K účelu co píšeš stačí zavést u objektů test typu
if (!invertory.open) **{do_something();} else **{nothing()}****
Žádné složitosti bych v tom nedělal. Pokud máš objektů hodně a
nepamatoval jsi na vypínání předem, můžeš jim dát obecný parent
nebo použít konstrukci with(). Ono bývá všeobecně snazší mít
inventář v jiném roomu a pak se ti spousta problémů vyřeší sama.


To mě taky napadlo, ale tomu jsem se chtěl právě vyhnout, protože těch objektů a jejich událostí u kterých bych musel zavádět takovou podmínku by bylo moc. Chci to udělat tak, aby to bylo univerzální a nemusel takové podmínky zavádět u každého objektu...
Nešlo by to třeba nějak takhle:
Díky screenu, by měl hráč pocit, že instance za inventářem jsou stále na svém místě, ale nemohl by s nimi nijak manipulovat, jelikož by byly deaktivované...


A poradíte mi ještě prosím, jestli lze v kódu nějak zkombinovat tyto dva příkazy
screen_save()
background_replace()
tak, aby se zachycený obrázek nemusel ukládat do složky s hrou a znovu do hry nahrával? Chci aby to bylo pro hru co nejmíň náročný, jelikož hráč bude inventář otevírat často..
Vykreslíš ho do surface a pak ho můžeš používat
kolikrát chceš. Je to rozumně rychlé a neošoupáváš disk.
No, je to pravda trochu složitější než save na disk..
Jestli jsi to nikdy nepoužil, otevři si prázdný projekt
a nejprve si to zkus. Budeš potřebovat tak dvě až tři hodiny
pokusů než ti to půjde hladce, ale je to silná technika.
Vyplatí se to umět.
Když máš přesměrovaný výstup pomocí surface_set_target,
tak se cokoli, co vykresluješ kteroukoli funkcí draw,
kreslí do surface místo do obrazu.
Tzn. například draw_sprite pak zakreslí daný sprite
do rovnou surface. Ber to jako malířské plátno.
To už je přece to nejsnazší.
Když máš surface jako target, tak se všechny draw eventy
všech objektů automaticky vykreslují do surface.
Tzn, stačí screen_redraw() a máš v surface uložený
screenshot.
Jenom pozor na to, že když chceš mít surface čisté,
musíš do něj vykreslit jednobarevný obdélník podkladové
barvy, jinak se volně kreslí jedno přes druhé. Je dobré
to dělat často.
Ještě se dá asi používat místo surface funkci
sprite_add_from_screen určenou na úpravu resources.
Jenže se surface se pak líp zachází, když už jednou
vznikne a umí lepší kousky.
Mělo by být v eventu draw poté co se vrátí vykreslování zpět.
Pokud ho chceš mít jinde, musíš opět zajistit překreslení
screenu kódem, protože v draw eventu se o to stará systém.


Tak už se více méně zadařilo, moc děkuju za ochotu! 
Jenom poslední otázečka: jak mám vykreslit ten jednobarevný obdelník jako podkladovou barvu? Zachycené pozadí v surface se mi už totiž vykresluje, ale při příkazu v Draw
draw_surface(surface,view_xview+64,view_yview+64)
se na sebe vykreslují další a další surfaces...


Tak už jsem na to přišel
surface_reset_target()
jsem měl předtím v Create a teď se problém vyřešil tím, že jsem tento příkaz dal do Draw..
Je to správně, nebo jsme problém vyřešil náhodou? A pokud to správně je, proč reset target nemůže být v Create abych to správně pochopil?
Reset_target může být kdekoli.
Prostě se od té chvíle jakýkoli draw kreslí zas do obrazu jako dřív.
Možná bys sem pak mohl publikovat výsledek svého snažení.
Rád bych viděl, co jsi natvořil.
Moc se nestává, že se mezi neregistrovanýma objeví někdo,
kdo používá hlavu i víc, než aby mu jen nepršelo do krku.


No, jedná se o point and click adventuru, která má některé pasáže i jako klasická plošinovka.. Vlastně vůbec nešlo o inventář, který jsme tu řešili. Ve hře bude spousta předmětů, na které když se klikne, tak se objeví zvětšenina předmětu a s tou bude muset hráč manipulovat tak, aby vyřešil nějaký rébus (např. otevřel dveře pomocí mechanismu, apod.). Proto jsem potřeboval, aby ostatní objekty v okolí byly v takové situaci deaktivované...
Obrázky, pozadí a animace si sám kreslím pastelkami, sice se nejedná o nic světoborného, ale i přesto bych to zde nerad zveřejňoval, dokud to není hotové.
Každopádně bych velice rád poděkoval tomuto serveru za Vaši pomoc a
ochotu 
Zobrazeno 22 zpráv z 22.