इस कार्यक्रम का लक्ष्य यह है कि माउस को हरे आयत आकार पर क्लिक किया जाना चाहिए जो खिड़की की पृष्ठभूमि के रंग को पीले या वापस डिफ़ॉल्ट रंग में बदल देता है और मुद्दा यह है कि रंग आयत के बाहर से भी बदला जा सकता है।

माउस क्लिक केवल आयत के अंदर ही लागू होना चाहिए।

समस्या एक्स और वाई स्थिति के साथ है अगर मुझे लगता है कि कोई और कथन है?

साथ ही बटन पर 'क्लिक मी' टेक्स्ट दिखाई नहीं देता है। छवि विवरण यहां दर्ज करें

बटन के लिए सही x और y स्थिति इस तालिका में है, लिंक पर क्लिक करें।

require 'rubygems'
require 'gosu'

# Instructions:  This code needs to be fixed and finished!
# The "Click Me" text is not appearing on the button, also
# the mouse_y co-ordinate should be shown along with the mouse_x one
# finally, a user has noticed the sometimes the button action occurs
# when you click out side the button area and vice-versa.


# determines whether a graphical widget is placed over others or not
module ZOrder
  BACKGROUND, MIDDLE, TOP = *0..2
end

# Global constants
WIN_WIDTH = 640
WIN_HEIGHT = 400

class DemoWindow < Gosu::Window

  # set up variables and attributes
  def initialize
    super(WIN_WIDTH, WIN_HEIGHT, false)
    @background = Gosu::Color::WHITE
    @button_font = Gosu::Font.new(20)
    @info_font = Gosu::Font.new(10)
    @locs = [60,60]
  end


  # Draw the background, the button with 'click me' text and text
  # showing the mouse coordinates
  def draw
    # Draw background color
    Gosu.draw_rect(0, 0, WIN_WIDTH, WIN_HEIGHT, @background, ZOrder::BACKGROUND, mode=:default)
    # Draw the button
    Gosu.draw_rect(50, 50, 100, 50, Gosu::Color::GREEN, ZOrder::TOP, mode=:default)
    # Draw the button text
    @button_font.draw("Click me", 60, 60, ZOrder::MIDDLE, 1.0, 1.0, Gosu::Color::BLACK)
    # Draw the mouse position information
    @info_font.draw("mouse_x: #{@locs[0]}", 0, 350, ZOrder::TOP, 1.0, 1.0, Gosu::Color::BLACK)
  end

  # this is called by Gosu to see if should show the cursor (or mouse)
  def needs_cursor?
    true
  end

  # If the button area (rectangle) has been clicked on change the background color
  # also store the mouse_x and mouse_y attributes that we 'inherit' from Gosu
  # you will learn about inheritance in the OOP unit - for now just accept that
  # these are available and filled with the latest x and y locations of the mouse click.

  def mouse_over_button(mouse_x, mouse_y)
    if ((mouse_x > 50 and mouse_x < 150) or (mouse_y > 50 and mouse_x < 100))
      true
    else
      false
    end
  end

  # Where is mouse_x and mouse_y defined

  def button_down(id)
    case id
    when Gosu::MsLeft
      @locs = [mouse_x, mouse_y]
      if mouse_over_button(mouse_x, mouse_y)
        @background = Gosu::Color::YELLOW
      else
        @background = Gosu::Color::WHITE
      end
    end
  end
end

# Lets get started!
DemoWindow.new.show
0
Ilham Rezaie 13 मई 2019, 08:37

2 जवाब

सबसे बढ़िया उत्तर

माउस_ओवर_बटन विधि में माउस स्थिति का पता लगाने के तर्क में त्रुटि है। जब सभी मानदंड पूरे हो जाते हैं तो माउस बटन क्षेत्र के ऊपर होता है। इसे पढ़ना चाहिए:

def mouse_over_button(mouse_x, mouse_y)
  mouse_x > 50 and mouse_x < 150 and mouse_y > 50 and mouse_x < 100
end

मैंने अनावश्यक "अगर" निर्माण को भी हटा दिया क्योंकि इसकी आवश्यकता नहीं थी।

2
Peter Camilleri 13 मई 2019, 09:20

बटन पर टेक्स्ट प्रदर्शित करने के लिए आपको बस इतना करना है कि बटन टेक्स्ट के ZOrder को MIDDLE से TOP में लाइन 40 पर बदलें क्योंकि बटन लेआउट ऑर्डर बटन टेक्स्ट के ऊपर है। मैं देख रहा हूँ कि आपके पास यह प्रश्न परिचय से था। स्विनबर्न यूनी से प्रोग्रामिंग यूनिट के लिए। मैं वहां फर्स्ट ईयर हूं। आपको कामयाबी मिले ;)

0
Shifat Rahman 3 मई 2021, 08:27