Diskuze: Deaktivování objektů
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Neregistrovaný
Zobrazeno 22 zpráv z 22.
//= 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.
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.