Ergebnis 1 bis 12 von 12

Thema: [XP - Script]Erweitertes Mausskript - Basierend auf cybersams Skript

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Mouse.setCursor("bild.png") sollte funktionieren. Das Bild muss im Pictures-Ordner liegen.

  2. #2
    Leider nein, dann meldet er auch den Typfehler.

  3. #3
    Das Script scheint etwas buggy zu sein. Ersetze mal im Script sämtliche Aufrufe
    Code:
    initSystem(nil)
    durch
    Code:
    initSystem()
    evtl. hilft das.

    Falls nicht, poste mal deinen Code und die genaue Fehlermeldung.

  4. #4
    Dadurch tritt der Fehler nicht mehr auf, aber leider bewegt sich der Cursor nicht. Welches Mausscript wird denn sonst so bei XP-Spielen benutzt?

  5. #5
    Was für eine Funktionalität benötigst du denn genau, beziehungsweise wie gut kennst du dich mit Ruby aus?
    Ich hatte in diversen Projekten ziemliche gute Erfolge mit meinem Mausscript, da gab es nie irgendwelche Beschwerden.
    Allerdings sehr viel Eigenarbeit. Das ist nichts poliertes und nichts angepasstes.

  6. #6
    Ohne es selbst bisher ausprobiert zu haben, soll das ganz gut funktionieren:

    Code:
    ############################################################################
    # Script by: BEHEMOTH #                                                     #
    #######################                                                     #
    # Script: Mouse Module (Requires Window Module)                             #
    # Current Version: 1.1                                                      #
    #                                                                           #
    # * Version 1.1                                                             #
    #     - Fixed Mouse_Buttons from Array To Table                             #
    #                                                                           #
    # * Version 1.0                                                             #
    #     - get/set the mouse position                                          #
    #     - get mouse button input                                              #
    #                                                                           #
    #############################################################################
    
    #############################################################################
    #                          ***Script Commands***                            #
    #                                                                           #
    # Mouse.press?(key)                                                         #
    # Mouse.trigger?(key)                                                       #
    # Mouse.repeat?(key)                                                        #
    # Mouse.release?(key)                                                       #
    # Mouse.show                                                                #
    # Mouse.hide                                                                #
    # Mouse.screen_pos_x                                                        #
    # Mouse.screen_pos_y                                                        #
    # Mouse.set_pos(x, y)                                                       #
    # Mouse.pos_x                                                               #
    # Mouse.pos_y                                                               #
    #                                                                           #
    #           ***Script commands intended for parrel processes***             #
    #                   ***and/or loops inside scripts***                       #
    #                                                                           #
    # Mouse.update                                                              #
    #                                                                           #
    #############################################################################
    module Mouse
      Mouse_Buttons = Table.new(3)
      Left_Click   = Mouse_Buttons[0] = 1
      Right_Click  = Mouse_Buttons[1] = 2
      Middle_Click = Mouse_Buttons[2] = 4
    
      @press = []
      @trigger = []
      @repeat = []
      @release = []
      @repeat_time = Table.new(255)
      @release_num = Table.new(255)
      
      REPEAT_TIME = 15
      REPEAT_PAUSE = 3
      
      @@cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
      @@set_cursor_pos = Win32API.new('user32', 'SetCursorPos', 'ii', 'i')
      @@show_cursor = Win32API.new('user32', 'ShowCursor', 'L', 'i')
      State = Win32API.new("user32", "GetKeyState", 'i', 'i')
      Key = Win32API.new("user32", "GetAsyncKeyState", 'i', 'i')
      #-------------------------------------------------------------------------
      # Shows Mouse Cursor
      #-------------------------------------------------------------------------
      def Mouse.show
        @@show_cursor.call(-1)
      end
      #-------------------------------------------------------------------------
      # Hides Mouse Cursor
      #-------------------------------------------------------------------------
      def Mouse.hide
        @@show_cursor.call(0)
      end
      #-------------------------------------------------------------------------
      # Checks if a key is being pressed and if it isn't anymore then is released
      #-------------------------------------------------------------------------
      def Mouse.check_press?(key)
        if not State.call(key).between?(0, 1)
          @release_num[key] = 1
          return true
        end
        if @release_num[key] == 1
          @release_num[key] = 0
          @release.push(key)
        end
        return false
      end
      #-------------------------------------------------------------------------
      def Mouse.check_trigger?(key)
        return Key.call(key) & 0x01 == 1
      end
      #-------------------------------------------------------------------------
      def Mouse.check_repeat?(key)
        if @trigger.include?(key)
          return true
        elsif (not @trigger.include?(key)) && @press.include?(key)
          if @repeat_time[key] >= REPEAT_TIME
            @repeat_time[key] -= REPEAT_PAUSE
            return true
          else
            @repeat_time[key]+=1
            return false
          end
        else
          @repeat_time[key] = 0
          return false
        end
      end
      #-------------------------------------------------------------------------
      def Mouse.press?(key)
        return @press.include?(key)
      end
      #-------------------------------------------------------------------------
      def Mouse.trigger?(key)
        return @trigger.include?(key)
      end
      #-------------------------------------------------------------------------
      def Mouse.repeat?(key)
        return @repeat.include?(key)
      end
      #-------------------------------------------------------------------------
      def Mouse.release?(key)
        return @release.include?(key)
      end
      #-------------------------------------------------------------------------
      # * Updates Mouse
      #-------------------------------------------------------------------------
      def Mouse.update
        Mouse.wheel
        @press = []
        @trigger = []
        @repeat = []
        @release = []
        for i in 0...Mouse_Buttons.xsize
          key_update(Mouse_Buttons[i])
        end
      end
      #-------------------------------------------------------------------------
      # * Updates Mouse's Key Input
      #-------------------------------------------------------------------------
      def Mouse.key_update(key)
        if check_press?(key)
          @press.push(key)
        end
        if check_trigger?(key)
          @trigger.push(key)
        end
        if check_repeat?(key)
          @repeat.push(key)
        end
      end
      #-------------------------------------------------------------------------
      # * Gets Mouse X Position, screen coordinate.
      #-------------------------------------------------------------------------
      def Mouse.screen_pos_x
        return screen_pos[0]
      end
      #-------------------------------------------------------------------------
      # * Gets Mouse X Position, screen coordinate.
      #-------------------------------------------------------------------------
      def Mouse.screen_pos_y
        return screen_pos[1]
      end
      #-------------------------------------------------------------------------
      # * Gets the mouse position relative to the screen
      #-------------------------------------------------------------------------
      def Mouse.screen_pos
        spos = [0, 0].pack('ll')
        @@cursor_pos.call(spos)
        return spos.unpack('ll')
      end
      #-------------------------------------------------------------------------
      # * Sets mouse position to the x, y
      #-------------------------------------------------------------------------
      def Mouse.set_pos(x, y)
        x = [[x, 0].max, 640].min
        y = [[y, 0].max, 480].min
        x, y = Win.client_to_screen(x, y)
        @@set_cursor_pos.call(x, y)
      end
      #-------------------------------------------------------------------------
      # * Gets the mouse position relative to the cilent
      #   If mouse is outside of client area then mouse position is -1, -1
      #-------------------------------------------------------------------------
      def Mouse.pos
        x, y = Win.screen_to_client(screen_pos_x, screen_pos_y)
        if x.nil?
          return -1, -1
        else
          width, height = Win.client_size
          if (x >= 0 and y >= 0 and x < width and y < height)
            return x, y
          else
            print("hello")
            return -1, -1
          end
        end
      end
      #-------------------------------------------------------------------------
      # Returns the Y coordinate relative to the client window
      #-------------------------------------------------------------------------
      def Mouse.pos_x
        return pos[0]
      end
      #-------------------------------------------------------------------------  
      # Returns the Y coordinate relative to the client window
      #-------------------------------------------------------------------------  
      def Mouse.pos_y
        return pos[1]
      end
      #-------------------------------------------------------------------------  
    end

  7. #7
    Du musst in beiden Scripts jeden Frame die Mouse.update Methode aufrufen. Eine Möglichkeit, dass zu bewerkstelligen, wäre folgender Code:
    Code:
    class << Input
      alias update_without_mouse update
      def update
        update_without_mouse
        Mouse.update
      end
    end
    Dann sollte auch der Mauszeiger angezeigt werden.

    Das Script zeigt allerdings keine Mauszeiger-Grafik an, wobei sich das leicht nachrüsten lässt. Ansonsten ist es aber besser geschrieben als Magors Script, welches ein paar Fehler im Code und imo auch im Design hat. Insbesondere ist es kritisch, dass in Magors Script die Maustasten nicht während des Mouse-Updates, sondern mehrfach innerhalb eines Frames abgefragt werden. Das ist einerseits nicht konsistent zu der Art und Weise wie in der RGSS Tasten abgefragt werden, es kann zum anderen aber auch dazu führen, dass Mausklicks manchmal nicht erkannt werden.

    Am besten du sagst mal, was du genau brauchst.

  8. #8
    Ich hab über ein klassisches Point-and-Click-Adventure nachgedacht. Ohne bewegliche Figur a la Maniac Mansion, sondern mit First-Person-Perspektive. Das Script müsste also nichts weiter machen können, als die Position des Cursors und die gedrückte Maustaste zu ermitteln. Außerdem sollte sich der Cursor je nach Position verändern können, aber das braucht nicht mit Ruby implementiert werden. Es wäre mMn sogar besser, das über ein PP zu steuern (weil diese Funktion abhängig von der Map ist). Es sollte nur eine Funktion zum schnellen Ändern des Cursorbildes geben.

  9. #9
    Nochmal nachgefragt: Was müsste man denn in das von Skorp gepostete Script einbauen, um eine Mauszeiger-Grafik anzuzeigen? -KD- meinte ja, dass das nicht getan wird.

Berechtigungen

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