• Login

Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

  • Playm

    RPG Studio Webmaster

    You have to register first, to connect to this user.

329

Rotierende Items auf der Map

Rating:

by Playm, Saturday, December 22nd 2018, 8:29am

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:

Quoted from "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:

Quoted from "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 Source code

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
highlight to read

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:

This article has been read 829 times.


Comments (3)

  • 3

    by Playm (Sunday, December 23rd 2018, 3:47am)

    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

    by Josey (Sunday, December 23rd 2018, 3:13am)

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

  • 1

    by Josey (Sunday, December 23rd 2018, 3:11am)

    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

Previous article

Die RMXP-Icons als 3D-Modell

by Playm (Sunday, December 16th 2018, 11:01am)