Please login or register.

Login with username, password and session length
Advanced search  

News:

IRC channel - server: waelisch.de  channel: #wme (read more)

Author Topic: interakce dvou předmětů ve scéně  (Read 7167 times)

0 Members and 1 Guest are viewing this topic.

Siky

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 41
    • View Profile
interakce dvou předmětů ve scéně
« on: April 10, 2006, 07:29:04 PM »

Jak mám udělat přetažení jednoho předmětu na druhý
ve scéně (aby se vyvolala nějaká reakce)?
Přes inventář to jde, ale ten nebudu používat.

dík
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: interakce dvou předmětů ve scéně
« Reply #1 on: April 10, 2006, 10:26:29 PM »

Jak to presne myslis? Jako ze hrac chytne mysi nejaky predmet ve scene a pretahne ho na jiny predmet?
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

Siky

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 41
    • View Profile
Re: interakce dvou předmětů ve scéně
« Reply #2 on: April 11, 2006, 07:18:51 PM »

Jo, přesně tak.
Logged

Hooke

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 38
    • View Profile
Re: interakce dvou předmětů ve scéně
« Reply #3 on: April 11, 2006, 08:21:39 PM »

Napadlo mne toto (neručím, že to bude fungovat případně, že to vůbec půjde :)).

Na akci na předmět co chceš sebrat získáš sprite toho objektu a nastavíš ho jako obrázek pro kurzor.
Přitom si do nějaké proměnné budeš muset zapsat, že máš v ruce nějaký předmět (nejlepší by asi bylo,
aby jsi do té proměnné přiřadil jméno itemu co máš v ruce, jinak tam budeš mít NULL). Potom upravíš
game.script událost OnLeftClick (například, nevím čím chceš použít předmět na předmět), kde se nejprve
budeš ptát, jestli máš nějaký předmět v ruce a pokud ho budeš mít, tak si zjistíš nad jakým předmětem
zrovna máš kurzor a poté se zeptáš jestli se dá předmět co máš v ruce použít na onen předmět nad kterým jsi.
focuseditem.CanHandleItem( promenna_s_nazvem_toho_co_mas_v_ruce ) a pokud toto
uspěje, tak focuseditem.ApplyEvent( promenna_s_nazvem_toho_co_mas_v_ruce )
a kurzor nastavit zpátky na nějaký ten default sprite.

EDIT: menší stylistické úpravy, protože jsem to napsal jako prase :) - ne že by to teď bylo nějak super >:D
« Last Edit: April 11, 2006, 08:27:02 PM by Hooke »
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: interakce dvou předmětů ve scéně
« Reply #4 on: April 11, 2006, 08:24:55 PM »

To s tim kurzorem je zajimava myslenka :) Ja chtel navrhnout odchytavat LeftClick a LeftRelease. Na left click by se zapamatoval aktivni objekt (pokud by byl), a pak by nejakej skriptik behal v cyklu, a pokud by byl nejaky objekt pretahovan, tak by to vzdycky posouval na pozici mysi. No a na left release by se zjistilo, na jaky jiny predmet ho hrac pretahl.
Behem pretahovani by se tomu predmetu muselo nastavit .Interactive na false, aby "nestinil" objekty pod mysi.
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

Siky

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 41
    • View Profile
Re: interakce dvou předmětů ve scéně
« Reply #5 on: April 11, 2006, 09:36:01 PM »

Potom upravíš
game.script událost OnLeftClick (například, nevím čím chceš použít předmět na předmět), kde se nejprve
budeš ptát, jestli máš nějaký předmět v ruce a pokud ho budeš mít, tak si zjistíš nad jakým předmětem
zrovna máš kurzor a poté se zeptáš jestli se dá předmět co máš v ruce použít na onen předmět nad kterým jsi.
focuseditem.CanHandleItem( promenna_s_nazvem_toho_co_mas_v_ruce ) a pokud toto
uspěje, tak focuseditem.ApplyEvent( promenna_s_nazvem_toho_co_mas_v_ruce )
a kurzor nastavit zpátky na nějaký ten default sprite.


Tohle mně nějak uniká ???
1) Jak mám zjistit nad jakým předmětem je kurzor?
2) Nějak mám zmatek v těch "Event handlers", jak se to používá?

Logged

Hooke

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 38
    • View Profile
Re: interakce dvou předmětů ve scéně
« Reply #6 on: April 11, 2006, 10:50:58 PM »


Tohle mně nějak uniká ???
1) Jak mám zjistit nad jakým předmětem je kurzor?
2) Nějak mám zmatek v těch "Event handlers", jak se to používá?


Code: [Select]
global IHaveItemInMyHand=null;   // do teto globalni promenne budes ukladat nazev predmetu ktery seberes, jinak tam budes mit null

on "LeftClick"
{
  var FocusedObject=Game.ActiveObject();    // takhle ziskas objekt, nad kterym je kurzor

  if( FocusedObject==null )
  {
    // kurzor nemas nad zadnym predmetem
  }
  else
  {
    // kurzor mas nad nejakym predmetem - pokud mas zaply debug, tak se ti nazev vypisuje napravo ;)
    if( IHaveItemInMyHand!=null )
    {
      if( FocusedObject.CanHandleEvent( IHaveItemInMyHand ) )   // zeptas se jestli objekt nad kterym jsi ma udalost s nazvem itemu v ruce
      {
        FocusedObject.ApplyEvent( IHaveItemInMyHand );  // aplikujes udalost s nazvem itemu co mas v ruce
        Game.SetCursor( "default.sprite" ); // vratis zpatky kurzor
        IHaveItemInMyHand=null;   // odstranis z ruky predmet ktery jsi tam mel
      }
    }
  }
}

Já ti to řeknu ale takhle. Vem si třeba to demo co je k WME a podívej se jak funguje game.script a game_daemon.script. Dalo by se říci, že jsem akorát napsal kód, který vlastně už v game.script existuje. Ale jak říkám, píšu to všechno z hlavy a nic jsem nezkoušel, takže si nejsem jistý jestli to bude fungovat. Mnemonic ti taky poskytl dobrou radu jak to udělat.

Takže Ti přeji hodně zdaru a trpělivosti k vyřešení problémů ;).
Logged

killer

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 22
    • View Profile
Re: interakce dvou předmětů ve scéně
« Reply #7 on: January 10, 2011, 07:54:14 PM »

tak řešim teď uplně stejný problem (sice jiným způsobem) ale nějak si  nevím rady.Actor ma vzít lopatu,ale jelikož je těžká,tak ji nechci dát do inventáře ale místo toho se mi objeví její sprite na ikoně.Lopatu chci vzít Levym tlačítkem a Pravým tlačítkem zrušit její výběr a vrátit na původní místo..zkoušel jsem podle tohohle návodu  http://forum.dead-code.org/index.php?topic=2985.0 a muj kod vypada asi takhle:
Code: [Select]
var lopata = Scene.GetNode("xe");    //vezme sprite lopaty
global IsLeftDown = false;

////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  IsLeftDown = true;    // zmačknul LT
  while(IsLeftDown)
    {
       lopata.X = Game.MouseX-25;
       lopata.Y = Game.MouseY-50;
       Sleep(50);
      //.......  zde bude kod co ma udělat na místě kde se bude kopat..
    }
}

on "RightClick"  //PT zruší výběr
{
  IsLeftDown = false;
  lopata.X = 250;
  lopata.Y = 500;   //a vratí ji na původní místo
 
}

problem je,že sice mi levym tlačítkem opravdu lopatu vezme ale už nijak nereaguje na  to pravý tlačítko.V tom linku se nějak upravuje i game.script bohužel jsem scela nepochopil jak takže mam pocit že kvuli tomu to nefunguje.Moch by mi někdo poradit jak upravit kod aby to fungovalo?
Logged
 

Page created in 0.038 seconds with 24 queries.