.[ ČeskéHry.cz ].
HW vs SW mouse cursor

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Grafika
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 16. únor 2013, 11:43:06    Předmět: HW vs SW mouse cursor Odpovědět s citátem

Zdravím,

předem se omlouvám zdali to je začátečnická otázka, ale v tomto nemám 100% jasno...

Jedná se o to jakou verzi kurzoru defaultně použít?

Zdali SW nebo HW verzi.

Ve svém projektu mám momentálně implementované obě dvě verze.
SW cursor mě přijde ale pomalejší na pohyb.
HW je dle mne lepší, ale zase se nerenderuje při nahrávání videa třeba.

Nejsem si jist který použít jako výchozí - osobně bych asi volil HW a pokud bude někomu dělat problémy, tak si v options přepne na SW.

Dále nevím jak moc která verze ovlivňuje výkon?
SW jakoby nasleduje pozici HW kurzoru a přijde mě že zbytečně ovlivňuje výkon.

Ve hře bude změna kurzoru zásadní pro hraní - reakce na objekty atd.

Díky moc za pomoc.

-------------------
Zde je ukázka jak se chová SW kurzor (to video reflektuje interakci se SpeedTree - které bohužel nejdou klasicky zaměřit myší - což jsem obešel, ale i tak nelze udělat target a proto je zásadní ta změna cursoru aby hráč věděl, že může provést interakci atd.)

http://youtu.be/nHXbaGepJ-U
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 16. únor 2013, 13:20:34    Předmět: Re: HW vs SW mouse cursor Odpovědět s citátem

Tak jsem si vyladil funkci na HW a SW cursor:)

Je to pro jistotu než vyřeším jaký defaultně použít (dle všeho co jsem již zjistil to bude HW), ale tak jako tak musím ponechat možnost aby si uživatel změnil dle potřeby.

Při startu hry se spustí vytvoření GUI pro SW cursor:

kód:

//BUILD cursor
        NI_GUI_cursor as NodeRef of Class NI_game_cursor = FindGUIControlByName(0,"cursor.NI_game_cursor")
        if NI_GUI_cursor != None
          destroynode(NI_GUI_cursor)
        .
        NI_GUI_cursor = CreateNodeFromPrototype( "NI_game_cursor" )
        NI_GUI_cursor.layer = "cursor"
        NI_GUI_cursor.build = true


Samotná třída na cursor:
kód:

method onControlBuild()
  //set HW cursor
  me.set_hw_cursor()//default hw set
.
method get_cursor_gui() as NodeRef of Class NI_game_cursor
  NI_GUI_cursor as NodeRef of Class NI_game_cursor = FindGUIControlByName(0,"cursor.NI_game_cursor")
  return NI_GUI_cursor
.
method set_hw_cursor()
  UnRegisterForPerFrameCallback(SYSTEM.EXEC.THISSCRIPT)
  me.NI_cursor_is_hw = true
  //HW
  SetCursorVisibility(true)
  //SW
  me.get_cursor_gui().visible = false
  //
  me.set_cursor_ico("DEFAULT")
  println("HW cursor SET")
.
method set_sw_cursor()
  RegisterForPerFrameCallback(SYSTEM.EXEC.THISSCRIPT)
  me.NI_cursor_is_hw = false
  //HW
  SetCursorVisibility(true)
  SetCursor("\GUI\NI_NEW\cursor_none.png")//SetCursor("")//restore default hw cursor
  //SW
  me.get_cursor_gui().visible = true
  //
  me.set_cursor_ico("DEFAULT")
  println("SW cursor SET")
.
method ishwcursor() as Boolean
  return me.NI_cursor_is_hw
.
method set_cursor_ico(state as String)
  when state
    is "DEFAULT"
      if( me.ishwcursor() == true)
        SetCursor("\GUI\NI_NEW\test_hw_cursor_off.png")
      else
        me.get_cursor_gui().texture = "\GUI\NI_NEW\test_cursor_off.png" 
      .
    .
    is "OBJECT_ENTER"
      if( me.ishwcursor() == true)
        SetCursor("\GUI\NI_NEW\test_hw_cursor_on.png")
      else
        me.get_cursor_gui().texture = "\GUI\NI_NEW\test_cursor_on.png" 
      .
    .
    default
      if( me.ishwcursor() == true)
        SetCursor("\GUI\NI_NEW\test_hw_cursor_off.png")
      else
        me.get_cursor_gui().texture = "\GUI\NI_NEW\test_cursor_off.png" 
      .
    .
  .   
.
function onFrameUpdate(elap as TimeInterval)
  if( $NI_GAMECURSOR.ishwcursor() != true )
   $NI_GAMECURSOR.get_cursor_gui().positionControlAtMouse()
  .
.


Test funkce na přepnutí SW nebo HW cursoru:
kód:

      is "ni_gui_basicgui_btn_hwcursor"
        if( $NI_GAMECURSOR.ishwcursor() == true)
          $NI_GAMECURSOR.set_sw_cursor()
        else
          $NI_GAMECURSOR.set_hw_cursor() 
        .
      .


Onmouse efekt volán při najetí na objekt:
kód:

      is Enter
        $NI_GAMECURSOR.set_cursor_ico("OBJECT_ENTER")
      .
      is Leave
        $NI_GAMECURSOR.set_cursor_ico("DEFAULT")           
     .



Vše funguje ok a dobřeWink[/code]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Grafika Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna