Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • Playm

    RPG Studio Webmaster

    Sie müssen sich registrieren, um eine Verbindung mit diesem Benutzer herzustellen.

329

Rotierende Items auf der Map

Bewertung:

Von Playm, Samstag, 22. Dezember 2018, 08:29

Hallo, letzte Woche hatte ich einen Blogpost über 3D-Modelle geschrieben und dachte das wäre voll cool. Das habe ich dann auch für so etwa 10 Stunden weiter gedacht bis... naja dann hat Josey mir drunter geschrieben:

Zitat von »Josey«

kann ich sowas nicht auch mit meinem Paint.NET erstellen, ganze ohne extra-3D-Programm?

Und sie hat natürlich recht. :P Für sich drehende Icons im Maker braucht man nicht Blender aufmachen. Ich schrieb dann fix eine Antwort zu ihrem Kommentar:

Zitat von »Playm«

Jetzt wo Du mich zum nachdenken bringst: Man kriegt das auch ohne extra Grafiken nur per Script hin. Wenn man die Icons in 32 Spalten aufteilt entspricht die X-Position der Spalte während der Rotation ja einfach cos(t), man könnte also wenn man sowas auf der Map möchte das mit einem updatenden Sprite machen. [...] Dazu schreibe ich dann nächstes Wochenende einen Blogpost. :-D

Und hier ist der Blogpost! :dance:

Ich habe tatsächlich ein Script geschrieben, was einem erlaubt mit einem CallScript einem Event eine rotierende Item-Grafik zu geben. Ich hatte mir das so vorgestellt, dass es auf der Map Items gibt, die man einsammeln kann und dann setzt man auf jedes dieser Events eine rotierende Grafik und dann ist das schick anzusehen.
Spoiler: Quellcode

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#==============================================================================
# ** Rotierende Items auf der Map, von Playm
#------------------------------------------------------------------------------
#    Ruft in einem Event folgenden Befehl via CallScript auf:
#    
#      set_rotation_graphics( 17,
#                            '021-Potion01')
#    
#    Event 17 bekommt dann eine CustomMoveRoute, die immer wieder die Event-
#    grafik ändert. Dafür wird ein extra virtuelles Spriteset angelegt
#    was aus einer Icongrafik generiert wird. Welche Icongrafik das ist,
#    legt der zweite Parameter fest. Hier wäre es die Heiltrank-Grafik.
#------------------------------------------------------------------------------
#    Einfache Nutzung in nicht-kommerziellen  RMXP  Projekten ist gestattet.
#    Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#    Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#==============================================================================
# ** RPG::Cache
#==============================================================================
module RPG
  module Cache
    def self.create_rotation_sprite(icon_name)
      path = 'Graphics/Characters/@rotation_' + icon_name
      if not @cache.include?(path) or @cache[path].disposed?
        icon_bitmap = self.icon(icon_name)
        @cache[path] = Bitmap.new(24*4, 24*4)
        for frame in 0..15
          dx = 24 * (frame % 4)
          dy = 24 * (frame / 4)
          x_rotation_offset = Math.cos(frame * 2 * Math::PI / 16)
          for column in 0..23
            src_rect = Rect.new( column, 0, 1, 24 )
            dc = dx + 12 + (column - 12) * x_rotation_offset
            @cache[path].blt( dc, dy, icon_bitmap, src_rect )
          end
        end
      end
    end
  end
end
#==============================================================================
# ** Interpreter
#==============================================================================
class Interpreter
  #--------------------------------------------------------------------------
  # * set rotation graphic for event (uses a custom move route)
  #   the_event_id : 1-999 for specific event, 0 for self
  #   icon_name    : file name in graphics/icons folder
  #--------------------------------------------------------------------------
  def set_rotation_graphics( the_event_id, icon_name )
    # Get character
    character = get_character(the_event_id)
    # Continue If no character exists
    return true if character == nil
    # Setup rotation spriteset if neccessary
    RPG::Cache.create_rotation_sprite(icon_name)
    # Create MoveRoute for the event
    move_route = RPG::MoveRoute.new
    for j in 0..15
      i = 15 - j
      move_route.list.unshift(
        RPG::MoveCommand.new( 41, ['@rotation_' + icon_name, 0, 
                                   2*(i/4+1), i%4]),
        RPG::MoveCommand.new( 15, [2])
      )
    end
    # Force move route
    character.force_move_route(move_route)
  end
end
zum Lesen den Text mit der Maus markieren

Ihr braucht keine extra Grafiken, es muss halt nur einen Icon geben, den ihr rotieren lassen wollt. Die Idee zur Umsetzung hatte ich ja letzte Woche schon in meiner Antwort an Josey formuliert: Wenn man weiß, wie die mathematischen Funktionen Sinus und Cosinus funktionieren, kann man sich recht schnell klar machen, dass wenn man sich ein Koordinatensystem mit dem Nullpunkt in der Mitte der Icongrafik sich denkt, die Cosinusfunktion mit der X-Koordinate jedes Pixels multipliziert seine Position während einer Rotation um die Y-Achse darstellt. Wir bekommen daduch zwar keine perspektivische Drehung hin, aber das hatte ich letzte Woche in Blender auch deaktiviert, weil ich es schicker fand. Soweit zum heutigen Blogpost. Ihr könnt das Script oben gerne für eure Projekte benutzen, nennt mich einfach in den Credits und befolgt die anderen Bedingungen oben im Scriptkopf.
Schöne Festtage! :thumbsup:

Dieser Artikel wurde bereits 518 mal gelesen.


Kommentare (3)

  • 3

    Von Playm (Sonntag, 23. Dezember 2018, 03:47)

    Script ist gepostet. ;)

    Kann sein, dass der Charset-Generator da was kaputt macht. Allerdings kenne ich dessen genaue Funktionsweise nicht, also kann ich da spontan nicht viel zu sagen.

  • 2

    Von Josey (Sonntag, 23. Dezember 2018, 03:13)

    btw: Poste das Script hierrein: http://www.rpg-studio.org/forum/index.ph…ard&boardID=543
    : P

  • 1

    Von Josey (Sonntag, 23. Dezember 2018, 03:11)

    Alter! XD
    Das ist ja genial! : D
    Schreibselst du mal eben sowas. Krass.

    Jetzt kommt die Frage auf: In welche Richtung dreht es sich? >XD

    Ich habs direkt mal ausprobiert, und natürlich funktioniert es!
    Wenn es in meinem HM-Projekt nicht funktioniert (Eventgrafik verschwindet einfach nur), liegts vermutlich am InGame-Charset-Generator, oder? Beide Scripte benutzen den RPG::Cache.
    Ich halte mich grad für klug XD

    Das sowas möglich ist, bringt mich echt zum Staunen! : D

Blog Navigation

Vorheriger Artikel

Die RMXP-Icons als 3D-Modell

Von Playm (Sonntag, 16. Dezember 2018, 11:01)