Autor Thema: Mouseover-Effekt im Inventory  (Gelesen 2726 mal)

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1243
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Mouseover-Effekt im Inventory
« am: 07. Oktober 2010, 10:31:09 »
Hallo Leutz!

Wollt mal fragen, ob zufällig jemand weiss, wie man einen Mouseover-Effekt bei Inventargegenständen einbaut, dass, wenn ich mit dem Mauszeiger über diese Gegenstände im Inventory fahre, die dafür zugeordnete Animation abspielt?

Genauer gesagt, möchte ich mich an einem 64er-GUI probieren, wo die Gegenstände nicht als Bild sondern als Text auftauchen und dieser Text soll dann eben halt die Farbe wechseln. Den Text bau ich aber trotzdem noch als Bilddatei ein.

Vielleicht weiss ja jemand, wie und vor allem WO ich das scripten muss.

Danke schon mal im voraus! ;)


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

Bòógieman

  • International anerkannter Superheld
  • Globaler Moderator
  • alter Tentakel
  • *****
  • Beiträge: 2654
  • Geschlecht: Männlich
  • Grün Tentakel = Running Sushi!
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #1 am: 07. Oktober 2010, 12:04:02 »
die befehlszeile zeigt ja schon beim MouseOver den namen des inventory items an, wenn ich mich recht entsinne
das wäre also schon ein guter einstiegspunkt für dich  ;)
Schlachtaman Vibrations, UHYEAH!!!
_________________________________

>>>> Ende der Kommunikation <<<<

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #2 am: 07. Oktober 2010, 13:12:43 »
Vielleicht weiss ja jemand, wie und vor allem WO ich das scripten muss.

Dreimal darfst Du raten ;)
repeatedly_execute() natürlich.

Du musst den Text nicht als Bild einbauen; so in der Art geht's auch:

DynamicSprite*ds_inv[50];

// in game_start

  DrawingSurface*dr;
  int i = 1;
  while (i <= Game.InventoryItemCount) {
    ds_inv[i] = DynamicSprite.Create(30, 14);  // geraten, nimm die Größe eines Inv sprites
    dr = ds_inv[i].GetDrawingSurface;
    dr.Clear(0);
    dr.DrawingColor = Game.GetColorFromRGB(255, 255 ,0);  // gelb
    dr.DrawString(2, 2, inventory[i].Name);
    dr.Release();
    inventory[i].Graphic = ds_inv[i].Graphic;
    i++;
  }

Um das noch zu animieren, würde ich das DynamicSprite einfach alle 20 loops oder so mit einer anderen Farbe neu zeichnen, solange die Maus drüber ist. Wenn sie nicht mehr drüber ist; wieder gelb.   

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1243
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #3 am: 07. Oktober 2010, 13:29:08 »
Hey, das sieht schon super aus. ;)

Die repeatedly_execute() sieht bei mir erstmal so aus:

#sectionstart repeatedly_execute  // DO NOT EDIT OR REMOVE THIS LINE
function repeatedly_execute (){

DisplaySpeechQ_RE(); // place it before any other script code in rep. exec.
 
  if (IsGamePaused () != 1)
  {
    CheckTimers ();

    // --- for the MovePlayer function ---
    if (GScancelable == 1)
    {
      GScancelable = 0;
      if (GetInvAt (mouse.x, mouse.y) < 0) on_mouse_click (LEFT);
      else on_mouse_click (LEFTINV);
    }
    else if (GScancelable == 2)
    {
      GScancelable = 0;
      CheckDefaultAction ();
      if (GetInvAt (mouse.x, mouse.y) < 0) on_mouse_click (RIGHT);
      else on_mouse_click (RIGHTINV);
    }
    CheckDefaultAction ();
    UpdateActionBar ();
  }
  // change the arrows in the inventory to show if you
  // can scroll the inventory:
  if (game.top_inv_item > 0)
  {
    // if inventory can scroll up
    SetButtonPic (MAINGUI, 9, 1, invUparrowONsprite);
    if (GetInvAt (180, 160) < 0) game.top_inv_item = game.top_inv_item - (game.num_inv_displayed / 2 ); //160,180 coords of the 1st inv. slot
  }
  else
  SetButtonPic (MAINGUI, 9, 1, invUparrowOFFsprite);
  if (game.top_inv_item < game.num_inv_items - game.num_inv_displayed)   //if invent. can scroll down
  SetButtonPic (MAINGUI, 10, 1, invDownarrowONsprite);
  else
  SetButtonPic (MAINGUI, 10, 1, invDownarrowOFFsprite);
 
  ///////////change-character settings
   
  sprite2=play2+431;
  sprite3=play3+431;
  sprite4=play4+431;
 
  SetGUIButtons();
 
 
}


Wie bau ich das ein, ohne dass ich hinterher mit Fehlermeldungen überhäuft werde und vermutlich nichts mehr geht?
Zu berücksichtigen ist rein räumlich auch die CharChange-Funktion, weil ich diese im GUI mit drinne habe. ;)


Danke schon mal KhrisMUC!


BG
der Volltanker


"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #4 am: 07. Oktober 2010, 16:28:37 »
Wie bau ich das ein, ohne dass ich hinterher mit Fehlermeldungen überhäuft werde und vermutlich nichts mehr geht?
Zu berücksichtigen ist rein räumlich auch die CharChange-Funktion, weil ich diese im GUI mit drinne habe. ;)

Hmm, wo ist das Problem? Solange Du nicht irgendwelchen if-Blöcken dazwischenfunkst, kannst Du das irgendwohin packen, völlig egal.
Ich würde einfach der Aufgeräumtheit halber ans Ende z.B. FlashInvItems(); setzen, und dann drüber:

void FlashInvItems() {
   ...
}

Dann ist das schön aufgeräumt.

Brauchst Du Hilfe beim Blink-Code?

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1243
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #5 am: 07. Oktober 2010, 16:48:06 »


Brauchst Du Hilfe beim Blink-Code?


Mit dem Blink-Code meinst Du bestimmt, dass sich beim Mouseover die Schrift verfärbt, oder?
Kannst ja vorsichtshalber mal posten.

Ansonsten werd ich jetzt mal den neuen Code ausprobieren.


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Mouseover-Effekt im Inventory
« Antwort #6 am: 07. Oktober 2010, 16:58:42 »
Vielleicht macht es aber in deinem C64-GUI doch mehr Sinn, dass man für das Inventory keine Bilder braucht? Es wäre dann ja immer mühselig, die Itemnamen erstmal in ein Bild zu schreiben. Übersetzen wäre so auch leichter.

Hängt natürlich aber auch davon ab, ob es so eine C64-Schriftart für AGS gibt. Sonst gibts ja auch noch dieses Font-Programm "Radiant FontEdit" für Adventure-Schriftarten.


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1243
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #7 am: 07. Oktober 2010, 17:02:15 »
DrawingSurface*dr;

damit hatte ich jetzt eine Fehlermeldung erhalten. Ist der Code insgesamt überhaupt für AGS 2.72 kompatibel oder funzt der Code nur bei AGS 3.x ?


BG
der Volltanker
"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"

KhrisMUC

  • Moderator
  • volljähriger Tentakel
  • *****
  • Beiträge: 988
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #8 am: 07. Oktober 2010, 17:03:10 »
Edit: 2.72? Hahahaha! Auwei. ;D

InventoryItem*oi;  // old inv item

#define INV_UNDER_MOUSE 255,255,0
#define INV_STANDARD 138,70,174

void FlashInvItems() {
  DrawingSurface*dr;
  InventoryItem*i = InventoryItem.GetAtScreenXY(mouse.x, mouse.y)
  if (i != oi) {   // Maus jetzt nicht mehr über Vorherigem
    if (i != null) {   // Maus über Anderem
      dr = ds_inv[i.ID].GetDrawingSurface();
      dr.Clear(0);
      dr.DrawingColor = Game.GetColorFromRGB(INV_UNDER_MOUSE);  // gelb aufleuchten lassen
      dr.DrawString(2, 2, inventory[i].Name);
      dr.Release();
    }
    if (oi != null) {   // Farbe des Vorherigen wieder zurücksetzen
      dr = ds_inv[oi.ID].GetDrawingSurface();
      dr.Clear(0);
      dr.DrawingColor = Game.GetColorFromRGB(INV_STANDARD);  // zurück auf lila
      dr.DrawString(2, 2, inventory[oi].Name);
      dr.Release();
    }
    oi = i;
  }
}

Nicht getestet.

Die RGB-Werte 138,70,174 (lila) hab ich aus dem GUI-Entwurf, den Du gepostet hast. Die musst Du natürlich auch im Code oben hernehmen, damit die Inventargegenstände anfangs lila geschrieben werden.


Endres:
Ich hab doch Code gepostet, der die Bilder automatisch generiert. Um das AGS-Inventar nutzen zu können, müssen nun mal Sprites verwendet werden.
Übersetzt werden die Namen ja automatisch, also sollten auch die übersetzten Wörter hergenommen werden.

Eine entsprechende Schrift sollte aber auf jeden Fall vorhanden sein, alle Buchstaben sind 8x8.

Endres

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1264
  • Geschlecht: Männlich
  • En|dres, der
    • ICQ Messenger - 230191486
    • MSN Messenger - enni_puschner@hotmail.de
    • Profil anzeigen
    • e7p.de
    • E-Mail
Re: Mouseover-Effekt im Inventory
« Antwort #9 am: 07. Oktober 2010, 17:05:25 »
Ich hab doch Code gepostet, der die Bilder automatisch generiert. Um das AGS-Inventar nutzen zu können, müssen nun mal Sprites verwendet werden.
Übersetzt werden die Namen ja automatisch, also sollten auch die übersetzten Wörter hergenommen werden.

OK, bin ich wohl nicht ganz mitgekommen. Theoretisch kann man ja sein Inventar auch ohne das AGS Feld machen. So macht es aber schon Sinn. ;)


Domi:"irc hab ich mir viren geholt.. icq hab ich nimmer"

1mal_volltanken

  • Midlife Crisis Tentakel
  • ******
  • Beiträge: 1243
  • Geschlecht: Männlich
  • Traue niemals einem glatzköpfigen Friseur!
    • ICQ Messenger - 327646596
    • Profil anzeigen
Re: Mouseover-Effekt im Inventory
« Antwort #10 am: 07. Oktober 2010, 17:23:44 »
So, habe nun den neuen Code ausprobiert.

Leider bekam ich wieder die Fehlermeldung

"undefined Drawing Surface"

Woran könnte das denn liegen?


BG
der Volltanker

"Tage sind eigentlich wie Nächte...nur nicht ganz so spät!"...hörte ich einmal einen sehr klugen, alten Mann beim Erdnüsse sortieren in der Kneipe sagen, kurz bevor er vom Hocker rutschte.


"Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde!"