Ergebnis 1 bis 13 von 13

Thema: Tutorialidee: "RGSS games from scratch"

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Ich könnte vielleicht ein wenig helfen falls gebraucht. Als ich damals noch mit dem XP gearbeitet habe, habe ich meine Projekte alle komplett mit RGSS in Ruby programmiert. Ich hatte damals aufgegeben wegen dem schrecklichen Scripteditor im Maker.

  2. #2
    Zitat Zitat von Cornix Beitrag anzeigen
    Ich hatte damals aufgegeben wegen dem schrecklichen Scripteditor im Maker.
    Arbeitsschritt 1: dafür sorgen, dass der Maker Code aus externen Dateien lädt und dann mit Sublime Text arbeiten. Funktioniert problemlos und sorgt direkt für eine saubere Projektstruktur. Das Ganze ist in zwei Zeilen erledigt.

    Code (ruby):
     
    $:.push(File.expand_path('../lib', __FILE__))
    require 'main'
     


    Lädt die lib/main.rb im Projektverzeichnis und von da aus lässt sich dann problemlos weiterer Code laden.

    Edit: wenn man will, kann man sogar für diesen Schritt auf den Maker verzichten. Das Dateiformat der Scripts.rxdata ist extrem simpel.
    Edit 2: Ich hab euch mal ein kleines Beispielprojekt zusammengepackt, das wirklich nur noch die allernötigsten Dateien enthält. Dementsprechend lässt sich das Projekt auch nicht mehr im Maker öffnen. Die Scripts.rxdata enthält exakt ein Script mit dem oben geposteten Code. RGSSFromScratch.zip

    Geändert von DFYX (18.03.2013 um 21:45 Uhr)

  3. #3
    Ja, ich kenne diese Möglichkeit.
    Ich hatte es einmal ausprobiert aber das war mir alles damals schon nervtötend.
    Der XP war auch nicht sehr schnell im Vergleich mit dem Ace oder anderen Möglichkeiten.
    Ich fühlte mich davon einfach irgendwann zu stark eingeengt.

    Falls jemand großes Interesse hat ein ganzes Projekt selbst in Ruby zu schreiben und über den Maker laufen zu lassen, dann würde ich das nur empfehlen wenn es kein großes Projekt werden soll.
    Wenn man sich ernsthaft die Arbeit machen will Programmieren zu lernen, eine Programmiersprache anzueignen und dann ein ganzes Spiel zu schreiben, dann kann man auch eigentlich sofort etwas "solideres" nehmen als den RPG-Maker.
    Aber allgemein ein netter Einstieg ins Programmieren. Man kann schnell und einfach ein Ergebnis zu dem sehen was man geschrieben hat.

  4. #4
    Der Punkt ist, dass sich dieses Tutorial in keiner Form um den Maker drehen wird. RGSS ist eine vollkommen generische 2D-Engine, der es völlig egal ist, ob du damit ein RPG, einen Shooter oder ein Point & Click Adventure machst. Wir werden in den Tutorials den Maker an sich überhaupt nicht verwenden.

    Hier nochmal zwei Beispielprojekte mit dem Code aus dem Eingangspost:
    RGSS 1.02 (RPG Maker XP)
    RGSS 3.01 (RPG Maker VX Ace)

    Ihr müsst keinen der beiden Maker (und auch kein RTP) installiert haben, um mit diesen Projekten zu arbeiten. Sie unterscheiden sich im Wesentlichen nur in der Game.exe, der Game.ini und der RGSSxxx.dll. Außerdem musste ich in der RGSS 3.01 Version noch zwei Schriftarten aus dem RTP kopieren, da die vorausgesetzt werden, selbst wenn ich sie gar nicht verwende.

    Und noch ein Edit: Ruby ist im Übrigen durchaus eine vollwertige Programmiersprache, auch wenn sie meistens eher im Bereich Webentwicklung anzutreffen ist. Beispielsweise setzen Twitter, Github und viele andere auf Ruby.

    Geändert von DFYX (25.03.2013 um 20:02 Uhr)

  5. #5
    Der zweite Link ist derselbe wie der erste.

  6. #6
    Ups, geändert (Man hätte sich aber auch anhand des Dateinamens denken können, wie der andere Link lautet)

  7. #7

    Doktor von Stein Gast
    Die Idee, allein über die "Sprache" RGSS Spiele zu schreiben, hat mich auch schon sehr oft beschäftigt. Das dabei natürlich Dinge wie Plattformunabhängigkeit flöten gehen, damit muss man umgehen. Aber es hilft ungemein, die Sprache von Grund auf zu lernen. Ich habe da auch direkt mal ein Beispiel dabei: Eine sehr einfache Snake-Variante.

    Download: Snake.rar

    Code:
    Code:
    class Game
      
      def main
        @direction = 0
        @tick = 0
        @tick_max = 10
        @parts = []
        @parts[0] = Sprite.new
        @parts[0].bitmap = Bitmap.new(16, 16)
        @parts[0].bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(200, 200, 200))
        @parts[0].x = 320
        @parts[0].y = 240
        @block = Sprite.new
        @block.bitmap = Bitmap.new(16, 16)
        @block.bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(255, 255, 255))
        @block.x = rand(39)*16
        @block.y = rand(29)*16
        Graphics.transition
        loop do
          Graphics.update
          Input.update
          update
          break if $scene != self
        end
      end
      
      def update
        @tick += 1
        if @tick >= @tick_max
          @tick = 0
          case @direction
          when 0
            @parts[-1].y -= 16
            reset if @parts[-1].y <= -16
          when 1
            @parts[-1].x += 16
            reset if @parts[-1].x >= 640
          when 2
            @parts[-1].y += 16
            reset if @parts[-1].y >= 480
          when 3
            @parts[-1].x -= 16
            reset if @parts[-1].x <= -16
          end
          follow if @parts.length > 1
        end
        if Input.trigger?(Input::UP)
          @direction = 0
        elsif Input.trigger?(Input::RIGHT)
          @direction = 1
        elsif Input.trigger?(Input::DOWN)
          @direction = 2
        elsif Input.trigger?(Input::LEFT)
          @direction = 3
        end
        if @parts[-1].x == @block.x && @parts[-1].y == @block.y
          new_part
          @block.x, @block.y = rand(39)*16, rand(29)*16
        end
        reset if crushing?
      end
      
      def reset
        @parts.each{|p| p.dispose}
        @parts = []
        @parts[0] = Sprite.new
        @parts[0].bitmap = Bitmap.new(16, 16)
        @parts[0].bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(200, 200, 200))
        @parts[0].x = 320
        @parts[0].y = 240
        @direction, @tick, @tick_max = 0, 0, 10
        @block.x, @block.y = rand(39)*16, rand(29)*16
      end
    
      def new_part
        @parts.unshift(Sprite.new)
        @parts[0].bitmap = Bitmap.new(16, 16)
        @parts[0].bitmap.fill_rect(Rect.new(0, 0, 16, 16), Color.new(255, 255, 255))
        @parts[0].x = -16
        @parts[0].y = -16
        @tick_max -= 1 if (@parts.length % 5 == 0) && @tick_max > 2
      end
        
      def follow
        for i in 0..@parts.length-3
          @parts[i].x = @parts[i+1].x
          @parts[i].y = @parts[i+1].y
        end
        case @direction
        when 0
          x = @parts[-1].x
          y = @parts[-1].y + 16
        when 1
          x = @parts[-1].x - 16
          y = @parts[-1].y
        when 2
          x = @parts[-1].x
          y = @parts[-1].y - 16
        when 3
          x = @parts[-1].x + 16
          y = @parts[-1].y
        end
        @parts[-2].x = x
        @parts[-2].y = y
      end
      
      def crushing?
        x = @parts[-1].x
        y = @parts[-1].y
        for i in 0..@parts.length-2
          if @parts[i].x == x && @parts[i].y == y
            return true
          end
        end
        return false
      end
    
    end
    (Bitte keine Kommentare zu meinem schlechten Schreibstil - Ist schon relativ alt.)

    Wenn Interesse da ist, kann ich das sehr gerne näher erläutern.

  8. #8
    Ich habe noch ein oder zwei Projekte mit dem RPG-Maker XP für welche ich komplette (oder fast komplette) eigene Engines geschrieben habe.
    Auch relativ alte Arbeiten, aber vielleicht kann der ein oder andere Gefallen an den Subsystemen finden.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •