Please login or register.

Login with username, password and session length
Advanced search  

News:

For WME related articles and tutorials visit WME Resource Center.

Author Topic: Při stiknutí tab se zobrazí na inter. místech obrázek  (Read 6156 times)

0 Members and 1 Guest are viewing this topic.

pirko7

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Posts: 166
    • View Profile
Při stiknutí tab se zobrazí na inter. místech obrázek
« on: March 29, 2010, 09:55:43 PM »

Ahoj,
dostal jsem nový úkol. Chce se po mě, abych udělal: Když hráč stikne klávesu "TAB" zobrazí se na scéně obrázek hvězdičky, tam kde jsou interaktivní místa. Prototyp mám už sestavený. Ale vím že do budoucna s tím budu mít velkou práci. A pak se také bojím, jestli to nezpomalí hru.
   Accessibility, tam lze zapnout tuto funkci. Bohužel, scénáristovi se nelibí takováhle "obyčejnější" metoda, a chce to tak jak jsem zde popsal. Ve wme to fugnuje že se postupně proklikávam interaktivníma mistama, on ale chce na každou scénu jednu možnost použítí této funkce a plynulé zobrazení všech míst hvězdičkou. Hráč teda v každé sceně může použit nápovědu pomocí "TAB" pouze jednou. Zde vidítě co jsem napsal do game.scriptu, hra bude mít ale 66 lokací a budu sem muset umístit switch o 66 možnostech. Do každe z nich ale vložím příkaz attach script, abych neměl game.script tak dlouhej. Chci se zeptat, jestli to takhle může ovlivnit plynulý chod hry?
Prohledal jsem dokumentaci, ale našel jsem pouze accessibility. Je i jiná možnost jak tento úkol splnit?  :)

Code: [Select]
if(Keyboard.KeyCode==VK_TAB)
{
global pouziti_tab;

if(pouziti_tab.Active)
{
}
else
{
pouziti_tab.Active = true;
var alfa = 255;
var kniha_hvezda = Scene.GetNode("hvezda_kniha");
var kniha2_hvezda = Scene.GetNode("hvezda_kniha2");
var nic_hvezda = Scene.GetNode("hvezda_nic");
var kniha = Scene.GetNode("kniha");
var kniha2 = Scene.GetNode("kniha2");
var nic = Scene.GetNode("nic");
if(kniha.Active)kniha_hvezda.Active = true;
if(kniha2.Active)kniha2_hvezda.Active = true;
if(nic.Active)nic_hvezda.Active = true;
// plynule zobrazeni
for (alfa=1; alfa<254; alfa=alfa+4) //zapnutí hvězd
{
kniha_hvezda.AlphaColor = MakeRGBA(255,255,255,alfa);
kniha2_hvezda.AlphaColor = MakeRGBA(255,255,255,alfa);
nic_hvezda.AlphaColor = MakeRGBA(255,255,255,alfa);
Sleep(10);
}
Sleep(1000);
//plynule schovat
for (alfa=254; alfa>20; alfa=alfa-4) //pohasnutí hvězd
{
kniha_hvezda.AlphaColor = MakeRGBA(255,255,255,alfa);
kniha2_hvezda.AlphaColor = MakeRGBA(255,255,255,alfa);
nic_hvezda.AlphaColor = MakeRGBA(255,255,255,alfa);
Sleep(10);
}
kniha_hvezda.Active = false;
kniha2_hvezda.Active = false;
nic_hvezda.Active = false;
}
}
« Last Edit: May 06, 2010, 09:23:38 PM by pirko7 »
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site

Myslím, že vypisovat ručně všechny aktivní objekty v každé scéně hraničí s masochismem.
Podívej se na tenhle článek, snad tě to inspiruje: http://res.dead-code.org/doku.php/resource:displaying_hint_icons_over_active_hotspots
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

pirko7

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Posts: 166
    • View Profile

Velké dík Mnemonicu. Je to přesně to, co potřebuju, a funguje to přesně podle představ. Děkuju.  ::thumbup
Logged

pirko7

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Posts: 166
    • View Profile

Měl bych k tomu ještě nějakou tu otázku:

1. Když chci aby mi to určitou entitu nezobrazovalo, dá se to nějak připsat? Přemýšlel jsem, ale nic mě nenapadlo.

2. Snažím se to poskládat tak, aby tato funkce byla možná pouze jednou na každé lokaci. Můj nápad je za pomocí switch a globálních proměn. Funguje to, jen jsem se chtěl zeptat jestli to nezpomalí běh hry až tam budu mít hodně lokací. Popřípadě jestli nebude opožděné to tlačítko space.
Můj počáteční script je zde:

Code: [Select]
//vypsane promeny
global v_chaloupce_space;
global u_chaloupky_space;
global rozcesti_v_lese_space;
global sachta_space;

if(Keyboard.KeyCode==VK_SPACE)
{
switch(Scene.Name)
{
case "v chaloupce":
  if(v_chaloupce_space.Active)
  {
  }
  else
  {
ShowHintIcons();
v_chaloupce_space.Active = true;
  }
              break;
 
case "u chaloupky":
  if(u_chaloupky_space.Active)
  {
  }
  else
  {
ShowHintIcons();
u_chaloupky_space.Active = true;
  }
              break;
 
            case "Rozcesti v lese":
  if(rozcesti_v_lese_space.Active)
  {
  }
  else
  {
ShowHintIcons();
rozcesti_v_lese_space.Active = true;
  }
              break;

case "sachta":
  if(sachta_space.Active)
  {
  }
  else
  {
ShowHintIcons();
sachta_space.Active = true;
  }
              break;
}
}

Logged

metamorphium

  • Global Moderator
  • Addicted to WME forum
  • *
  • Karma: 12
  • Offline Offline
  • Gender: Male
  • Posts: 1511
  • Vampires!
    • View Profile
    • CBE  software s.r.o.

Já bych té entitě ve Scene Editoru přiřadil custom attribute
třeba HintDisable s hodnotou true

pak bych upravil ten kod pro hintlayery tak, aby zpracoval jen to co neni HintDisable. Příklad:

Code: WME Script
  1.             var Node = MainLayer.GetNode(i);
  2.             if (!Node.HintDisable) AddHintIcon(HintLayer, Node);
  3.  

Logged
J.U.L.I.A. Enhanced Edition, Vampires!, J.U.L.I.A., J.U.L.I.A. Untold, Ghost in the Sheet

pirko7

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Posts: 166
    • View Profile

1. Skvělé, funguje, děkuju.  :)
2. A o otázce dvě by jsi nevěděl, jestli to nevádí takhle postavit? :-) Jde mi hlavně o budoucnost, teď to šlape krásně.
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site

K otázce 2... ty si libuješ v obrovských switch příkazech :) Určitě se to dá napsat elegantněji, jako například:

Code: WME Script
  1. global g_VisitedScenes;
  2. var sceneName = Scene.Name;
  3.  
  4. if (g_VisitedScenes[sceneName] != true)
  5. {
  6.   // v téhle scéně ještě nebyl
  7.   // ... něco
  8.  
  9.   // označit tuhle scénu jako vyřízenou
  10.   g_VisitedScenes[sceneName] = true;
  11. }
  12.  
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

pirko7

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Posts: 166
    • View Profile

Mám se ještě hodně co učit. Tak malý script a kolik potu mi ušetří. Mnemonicu, Velké díky.  ::thumbup  :D
Logged

pirko7

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Posts: 166
    • View Profile

Chtěl bych se ještě zeptat, jde nastavit pozici "určitých" očí? Moc mě nenapadají nápady, a né vždy mi to projde přes "centrování" ve *.sprite. Poměrně dost entit se mi neshoduje s pozicí.
Logged
 

Page created in 0.081 seconds with 20 queries.