Ergebnis 1 bis 20 von 41

Thema: No problems ^,^] Adrian2000 - Problemthread(RGSS)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Adrian2000 - Problemthread(RGSS)

    Momentane Frage(n):

    So, erneut habe ich eine Frage ^,^
    Und zwar möchte ich, dass im laufendem Spiel eine Datei auf dem Desktop erstellt wird. Dabei ist es aber wichtig, dass die enstprechende .txt-Datei niergendswo im Game Ordner liegt. Dabei möchte ich den Text innerhalb Ruby selber bestimmen. Allerdings ist der Text bloß einzeilig.

    Wichtig ist auch, dass der Name der .txt Datei bestimmbar ist.
    Zum Beispiel wäre es sehr sinnvoll, dass die Datei den Namen »Blatt Papier.txt« heißt und den Inhalt: ,,Dies ist ein Blatt Papier"
    bekommt.

    Wie bereits gesagt ist es sehr wichtig, dass die Datei am Ende im Spieleordner nicht ist.
    Dabei ist es mir eigentlich egal, ob die Datei im ~/MeinProjekt/Graphics/texte/Blatt Papier.txt/ ist und am Ende, wenn das Spiel verschlüsselt wird, nicht mehr einsehbar ist, aber vom Maker aus auf dem Desktop kopierbar ist oder ob sie sogar ganz mit Ruby erstellt wird, was ja bei einem einfachen Text Dokument nicht schwer sein sollte.

    Außerdem: Wie ändere ich den Titel dieses Threads? ^,^


    Geändert von SMWma (26.03.2011 um 14:04 Uhr)

  2. #2
    Warum sollte "mehr" nicht gehen? Hast du es denn mal ausprobiert?

  3. #3
    nein... Ich meite von meinen momentanen Wissenstand kann ich nicht mehr. Ich hab null Ahnung, wie ich ein Fenster bewegen kann

  4. #4
    Im Endeffekt musst du doch nur in der Update-Methode der entsprechenden Szene die x und y Koordinaten anpassen.

    Beispiel:
    Code:
    if window.x < 50
      window.x += 2
    end
    So wird das Fenster in jedem Frame um 2 Pixel nach rechts geschoben, bis x bei 50 angelangt ist.

  5. #5
    Oh, ja das wollte ich auch 'mal wissen.
    Aber so, dass die Textbox von unten kommt und oben sichtbar ist. Also so ein 1 Sekunden langer Fade-in Effekt. Sieht bestimmt besser aus, als beim normalen. Ich kenns so von Ocean of Mana ;-)

  6. #6
    sodele(lol, sodele? ) es hat geklappt. Hatte zwar ein paar Probs, aber dies hatte mit nem Tippfehler zu tun xD
    Hab geschrieben
    @command-window.x
    man beachte, dass ich vergessen habe, auf die Großstelltaste zu drücken
    Naja, hat ja wunderbar hingehauen.

  7. #7
    *hust*
    NACH OBEN SCROLLEN BITTE ^,^
    *no more hust*

  8. #8
    Das kommt ganz darauf an wo du dieses Icon angezeigt haben möchtest. In einem Window würde z.b.
    Code:
    icon = RPG::Cache.icon(name, hue)
    self.contents.blt(x, y, icon, icon.rect)
    genügen. Das funktioniert natürlich auch mit jedem beliebigen anderen Bitmap.

    Wenn du es eigenständig irgendwo am Bildschirm anzeigen möchtest brauchst du dafür ein Sprite.
    Code:
    sprite = Sprite.new
    sprite.x = x
    sprite.y = y
    sprite.bitmap = RPG::Cache.icon(name, hue)
    Ein bisschen mehr Information wäre schon nützlich

  9. #9
    ich habe allgemein geredet ^,^ Danke xD

  10. #10
    Bitte beachten Sie den ersten Post. Dort wurden bereits zwei Fragen reineditiert, die mit einen · versehen wurden. Danke. ^,^

  11. #11
    Für Position:
    Mir fiele da keine andere Lösung ein als jedes Event abzufragen:
    Mindestens ein Event:
    Code:
    def event_on_position( x, y)                     #neue Funktion
      $game_map.events.each_value do |event|         # wiederhole für jedes Event:
        return true if event.x == x and event.y == y #  gebe <true> zurück wenn Koord. übereinstimmen
      end                                            #
      return false                                   # wenn nichts gefunden wurde gebe <false> zurück
    end                                              #
    Genau ein Event:
    Code:
    def event_on_position( x, y)         #neue Funktion
      event_found = false                # initialisiere Flag für gefundenes Event
      $game_map.events.each_value do |event| # wiederhole für jedes Event:
        if event.x == x and event.y == y #  wenn Koordinaten übereinstimmen:
          return false if event_found    #   gebe <false> zurück wenn bereits zuvor ein Event gefunden wurde
          event_found = true             #   setze Flag auf <true>
        end                              #
      end                                #
      return event_found                 # gebe Flag zurück
    end                                  #
    =>
    Code:
    event_on_position( x, y)
    Für Terrain-Tag gibts im RMXP hingegen bereits eine nützliche Funktion:
    Code:
    $game_map.terrain_tag( x, y)

    Geändert von ETeCe (06.09.2010 um 13:52 Uhr)

  12. #12
    Mit Enumerable#any? kannst du auch prüfen ob ein Element einer Collection eine bestimmte Eigenschaft inne hat.
    Code:
    $game_map.events.any? do |event_id, event|
      event.x == x && event.y == y
    end

  13. #13
    Zitat Zitat von ETeCe Beitrag anzeigen
    Für Terrain-Tag gibts im RMXP hingegen bereits eine nützliche Funktion:
    Code:
    $game_map.terrain_tag( x, y)
    Das bedeutet, möchte ich nun den Terrain Tag des Feldes X/Y herausfinden und diesen Wert in einer game_variable abspeichern, so müsste ich lediglich diesen Code abfrufen:

    Code:
    $game_variables[9] = 
    $game_map.terrain_tag(1,2)
    Der Zeilenunbruch ist deshalb, weil der Call-Skript-Befehl leider nur kürzere Befehle aufnehmen kann.

    Doch das löst nicht so richtig mein Problem: Gebe ich dem Wasser den Terrain-Tag 1, so gibt es 2 aus. Doch gebe ich den Wasser den Terrain-Tag 2, so bekommen ich 1. Und bei 7 für das Wasser bekomme ich auch den Wert 1 zurück.

    Und dein kleines Skript:
    Code:
    def event_on_position( x, y)                     #neue Funktion
      $game_map.events.each do |event|               # wiederhole für jedes Event:
        return true if event.x == x and event.y == y #  gebe <true> zurück wenn Koord. übereinstimmen
      end                                            #
      return false                                   # wenn nichts gefunden wurde gebe <false> zurück
    end
    sieht vielversprechend aus. Also müsste ich nun im Spiel den Call-Skript-Befehl:
    event_on_position( 1, 2)
    aufrufen. Doch wie lasse ich einen Switch einschalten, wenn auf ( 1, 2) ein Event befindet?

    -KD- Was meinst du genau? Du sprichst viel zu hoch für mich ^,^ Bin halt noch ein riesiger Anfänger xD Und ich lese mir auch schon dein Tutorial durch ^,^

    Geändert von SMWma (06.09.2010 um 12:05 Uhr)

  14. #14
    Soo... erstmal meinen Code leicht verbessern:

    Code:
    def event_on_position( x, y)                     #neue Funktion
      $game_map.events.each_value do |event|         # wiederhole für jedes Event:
        return true if event.x == x and event.y == y #  gebe <true> zurück wenn Koord. übereinstimmen
      end                                            #
      return false                                   # wenn nichts gefunden wurde gebe <false> zurück
    end
    (kleine Änderung in Zeile 2, ich hatte $game_map.event irrtümlich für ein Array gehalten...)

    Am besten wäre wohl diese Funktion in die Klasse Game_Interpreter einzubauen, um diese Funktion im Call-Script zu nutzen...
    (wenn du dir nicht sicher sein solltest wo du das einfügen kannst erstell am besten ein neues Script, schreibe in die erste Zeile
    class Game_Interpreter
    füge ab der zweiten Zeile den Code ein und schließe mit einer weiteren Zeile
    end
    ab)

    Um einen Switch zu aktivieren wenn sich an der Position ein event befindet müsstest du entweder
    Code:
    event_on_position( x, y)
    in einem Conditional Branch verwenden und bei Zutreffen einen Switch aktivieren oder als
    Callscript:
    Code:
    $game_switches[ z ] = 
    event_on_position( x, y)
    (x, y, z entsprechend ersetzen)
    Bei dieser Call-Scriptvariante würde der Switch ausgeschaltet wenn an der Stelle kein Event ist...


    Zum Terrain-Tag:
    Joa, genau so... funktioniert bei mir auch super...
    evtl. liegt der "Fehler" darin dass die Tiles von links nach rechts bzw. oben nach unten von 0 beginnend durchnummeriert werden...
    (das Feld oben-links entspricht also (0,0) , das rechts daneben (1,0) etc.)

    Geändert von ETeCe (06.09.2010 um 14:07 Uhr)

  15. #15
    Zitat Zitat
    -KD- Was meinst du genau? Du sprichst viel zu hoch für mich ^,^ Bin halt noch ein riesiger Anfänger xD Und ich lese mir auch schon dein Tutorial durch ^,^
    Mir gings einfach nur darum das man sowas:
    Code:
    def gefunden?
      collection.each do |element|
        if element.irgendwas == irgendwas then
          return true
        end
      end
      return false
    end
    auch kürzer schreiben kann:
    Code:
    def gefunden?
      collection.any? {|element| element.irgendwas == irgendwas }
    end
    Muss man nicht machen. Ist wie gesagt nur ein Vorschlag. Mein Code macht genau dasselbe wie ETeCe seiner. Ist also egal welchen du nimmst.

    Zitat Zitat
    Doch das löst nicht so richtig mein Problem: Gebe ich dem Wasser den Terrain-Tag 1, so gibt es 2 aus. Doch gebe ich den Wasser den Terrain-Tag 2, so bekommen ich 1. Und bei 7 für das Wasser bekomme ich auch den Wert 1 zurück.
    Neben dem was ETeCe gesagt hat wäre noch möglich, dass du über dem Wasser ein anderes Tile mit einem Terrain-Tag hast. Die Funktion terrain_tag gibt dir nur den Terrain-Tag des obersten Tiles (also im obersten Layer) zurück. Nur wenn dieser keinen Terrain-Tag hat wird der Terrain-Tag eines tieferen Layers zurückgegeben.

Berechtigungen

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