• Anmelden

Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

1

Mittwoch, 16. Oktober 2013, 19:11

Ausschnitt eines Bildes anzeigen

Hallo werte Community!

Seit geraumer Zeit brennt mir eine Frage auf den Nägeln, die ich nach langem Suchen und Herumprobieren als nicht autonom lösbar einstufe - und hiermit den Ruby-Meistern des Forums stellen möchte:

Gibt es eine halbwegs performante und/oder simple Möglichkeit, nur einen Ausschnitt eines Pictures anzuzeigen?

Sinnig wäre es (in meinem Kopf), zu den Standardparametern schlicht vier Weitere hinzuzufügen: Rand links, Rand oben, Breite, Höhe.

Der doppelplusedle Megabefehl sähe dann etwa so aus:

Ruby Quellcode

1
2
3
#edel begin
$game_screen.pictures[].show_part(Name, Ursprung, x, y, ZoomX, ZoomY, Alpha, Blendmodus, Links, Oben, Breite, Höhe)
#edel end


Warum aber dieses auf den ersten Blick unnötige Add-On?
Gäbe es einen solchen Befehl, könnte man mit überschaubarem Aufwand sehr eindrucksvolle Tricksereien fabrizieren, beispielsweise Parallaxing-, Fahnen- oder schlicht Welleneffekte - und in Verbindung mit einem Screenshotscript wären der Eikenndie-Phantasie[sic!] bei z.B. Transitions keine Grenzen mehr gesetzt (daher benutze ich auch keine manuell gesplitteten[sic!] Bilder, was natürlich die naheliegendste Lösung wäre - aber ich bin ja ein Flexibitionist).

Wer aus meinen Beschreibungen nicht ganz schlau wird, kann in dieser Edeldemo (GML) begutachten, wie schlüpfrig sich der allseits beliebte Aluxes im Wasser windet (Blasen und Hintergrund sind schmuckes Beiwerk, weil mir langweilig war).
Der Sprite wird hier in 232px*8px große Teilstücke zerlegt, die dann via for-Statement und ein wenig Sinusgeplänkel durch die Gegend geschoben werden.

Über eine(n) Lösung(sansatz) würde ich mich freuen - selbst wenn er/sie bloß daraus besteht, mir zu erklären, dass der RMXP für derlei Spielerein viel zu sperrig und unperformant ist.

Gruß & Danke, Shabz
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Shabraxxx« (16. Oktober 2013, 19:07)


2

Mittwoch, 16. Oktober 2013, 19:27

Pictures werden im RMXP durch die Klasse Sprite_Picture auf dem Bidlschirm angezeigt, diese Klasse ist eine Subklasse von Sprite, und wie wir in Scientia sehen, gibt es bereits eine Methode Sprite#src_rect. (Sidefact: Diese Methode wird für die Character Grafiken verwendet.)

Du kannst also bei der Methode Game_Picture#show einfach ein Rect als optionalen Parameter ergänzen:
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#==============================================================================
# ** Game_Picture
#==============================================================================
class Game_Picture
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor   :src_rect
  #--------------------------------------------------------------------------
  # * Show Picture
  #     name       : file name
  #     origin     : starting point
  #     x          : x-coordinate
  #     y          : y-coordinate
  #     zoom_x     : x directional zoom rate
  #     zoom_y     : y directional zoom rate
  #     opacity    : opacity level
  #     blend_type : blend method
  #     src_rect   : src_rect for Sprite (optional)
  #--------------------------------------------------------------------------
  alias_method(:org_show_wo_srcrct, :show)
  def show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type, src_rect=nil)
    org_show_wo_srcrct(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
    @src_rect = src_rect
  end
end
zum Lesen den Text mit der Maus markieren


Jetzt muss nurnoch die Sprite_Picture Instanz darauf reagieren, mir würde da soetwas wie der folgenden Scriptschnippsel als Lösung vorschweben:
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#==============================================================================
# ** Sprite_Picture
#==============================================================================
class Sprite_Picture < Sprite
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  alias_method(:org_update_wo_srcrct, :update)
  def update
    org_update_wo_srcrct
    unless self.bitmap.nil?
      if @picture.src_rect.nil?
        @picture.src_rect = Rect.new(0,0,bitmap.width, bitmap.height)
      end
      self.src_rect = @picture.src_rect if src_rect != @picture.src_rect
    end
  end
end
zum Lesen den Text mit der Maus markieren
Aber Du solltest an dem Punkt genug Anregung haben, selbst weiter zu kommen (vielleicht reicht dir auch schon das bisherige Script Bild).

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Playm« (16. Oktober 2013, 21:07) aus folgendem Grund: Fehler im Skript korrigiert


Shabraxxx

Projekt: Ressourcenbereich & Seitenredaktion

  • »Shabraxxx« ist der Autor dieses Themas

Motto: Mein Luftkissenfahrzeug ist voller Aale.

  • Nachricht senden

3

Montag, 21. Oktober 2013, 01:16

Das ging ja fix, Playm - und funktioniert einwandfrei!

Ruby Quellcode

1
dank**10


Zur Belustigung all derjeniger, die interessiert, wie man dieses Edeladdon verwenden kann, habe ich mal auf die Schnelle eine kleine Demo gebastelt - nichts Spektakuläres, aber es funktioniert:
Gefakete[sic?] "Realtime-Reflexion" im RMXP.
Vielleicht eine ganz putzige Idee für mapbasierte Titelscreens.

Attachment 21897


Soweit wars das von meiner Seite; falls noch Fragen und/oder Anregungen da sind, nur zu!
Gruß & Danke, Shabz

P.S.: Demo veredelt.
„Albrecht Dürer, geboren 1471, gestorben 1530.
Der Nürnberger Maler, der ganz Europa faszinierte; mit seinem scharfen Auge, seiner Meisterschaft in Linienführung und Plastizität, sowie seiner Leihwagenfirma.“

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Shabraxxx« (21. Oktober 2013, 01:16)


Ähnliche Themen

Social Bookmarks