【问题标题】:How do i Detect mouse input,click. on printed text?我如何检测鼠标输入,单击。在印刷文本上?
【发布时间】:2019-04-10 14:00:02
【问题描述】:

我想检测鼠标是否在文本上(或文本打印区域) 当您单击文本时。它会将您带到指定区域。

我试图检测鼠标是否在一个点上。但我不知道如何检测一个区域。

_MOUSESHOW
a = _MOUSEINPUT
b = _MOUSEBUTTON(1)


IF _MOUSEX = 5 THEN GOTO damage
PRINT "[attack]"

damage:
PRINT u$; "takes", playerDamage%

我想要的结果是每当用户将鼠标悬停并单击文本 [attack] 时,它会将它们发送到 damage

【问题讨论】:

    标签: click mouse qb64


    【解决方案1】:

    这是在 QB64 中使用鼠标的示例代码段:

    u$ = "Player1"
    CLS
    PRINT "[attack]"
    DO
        IF INKEY$ <> "" THEN END ' or gosub your keyboard input routine
        IF _MOUSEINPUT THEN
            IF _MOUSEBUTTON(1) THEN ' left mouse click
                ' X, Y return single
                MouseY = CINT(_MOUSEX): MouseX = CINT(_MOUSEY)
                ' check mouseover text
                IF MouseX = 1 AND (MouseY >= 1 AND MouseY <= 8) THEN
                    GOSUB damage
                END IF
            END IF
        END IF
    LOOP
    END
    
    damage:
    playerdamage% = INT(RND * 9 + 1)
    LOCATE 3, 1
    PRINT u$; "takes", playerdamage%
    RETURN
    

    【讨论】:

    • 谢谢,我会测试所有三个,看看哪一个效果最好。
    • 这对一些变量也有帮助吗? u1$ = "player" u$ = "Dark Lord" j$ = "Smith" i$ = "Micheal" o$ = "Johnson" 'health DarkLordHP_1% = 999999999 Playerhp% = 10 smithhp% = 15 johnsonhp% = 7 michealhp% = 10 'damage DarkLordDamamge_1% = 9 playerDamage% = INT(RND * 9 + 1) johnsonsDanamge% = 3 SmithDamage% = 7 MichealDamage% = 5 'Defence DarkLordDefence_1% = 100000 PlayerDefence% = INT(RND * 9 + 1) JohnsonDef% = 2 smithDefence% = 5 MichealDefence% = 3
    【解决方案2】:

    QB64中另一个使用鼠标的代码段:

    u$ = "Player1"
    CLS
    PRINT "[attack] [defend]"
    DO
        x$ = INKEY$
        IF x$ = "a" THEN GOSUB damage
        IF x$ = "d" THEN GOSUB defend
        IF x$ = CHR$(27) THEN END
        IF _MOUSEINPUT THEN
            IF _MOUSEBUTTON(1) THEN ' left mouse click
                ' X, Y return single
                MouseY = CINT(_MOUSEX): MouseX = CINT(_MOUSEY)
                ' check mouseover text
                IF MouseX = 1 AND (MouseY >= 1 AND MouseY <= 8) THEN
                    GOSUB damage
                END IF
                IF MouseX = 1 AND (MouseY >= 10 AND MouseY <= 17) THEN
                    GOSUB defend
                END IF
            END IF
        END IF
    LOOP
    END
    
    damage:
    playerdamage% = INT(RND * 9 + 1)
    LOCATE 3, 1
    PRINT u$; " takes"; playerdamage%
    RETURN
    
    defend:
    playerdefense% = INT(RND * 9 + 1)
    LOCATE 4, 1
    PRINT u$; " restores"; playerdefense%
    RETURN
    

    【讨论】:

      【解决方案3】:

      在 QB64 中使用鼠标的另一个示例代码:

      DEFINT A-Z
      REM $dynamic
      u$ = "Player1": playerhits% = 128: playerlevel% = 1
      CONST maxhits = 9 ' maximum hits for attack/defend
      CONST hitsrequired = 90 ' hits required to level up
      CLS
      LOCATE 25, 1
      COLOR 15, 1
      PRINT SPACE$(80);
      LOCATE 25, 1
      PRINT "Enter [a]ttack, [d]efend, [i]nfo, <esc> to quit";
      LOCATE 1, 1
      COLOR 15, 0
      PRINT "[attack] [defend] [info] [quit]"
      GOSUB info
      DO
          x$ = LCASE$(INKEY$)
          IF x$ = "a" THEN GOSUB damage: GOSUB info
          IF x$ = "d" THEN GOSUB defend: GOSUB info
          IF x$ = "i" THEN GOSUB info
          IF x$ = CHR$(27) THEN SYSTEM
          IF _MOUSEINPUT THEN
              IF _MOUSEBUTTON(1) THEN ' left mouse click
                  ' X, Y return single
                  MouseY = CINT(_MOUSEX): MouseX = CINT(_MOUSEY)
                  ' check mouseover text
                  IF MouseX = 1 AND (MouseY >= 1 AND MouseY <= 8) THEN ' [attack]
                      GOSUB damage
                  END IF
                  IF MouseX = 1 AND (MouseY >= 10 AND MouseY <= 17) THEN ' [defend]
                      GOSUB defend
                  END IF
                  IF MouseX = 1 AND (MouseY >= 19 AND MouseY <= 24) THEN ' [info]
                      GOSUB info
                  END IF
                  IF MouseX = 1 AND (MouseY >= 26 AND MouseY <= 31) THEN ' [quit]
                      SYSTEM
                  END IF
                  ' check mouseover statusline
                  REM "Enter [a]ttack, [d]efend, [i]nfo, <esc> to quit";
                  IF MouseX = 25 AND (MouseY >= 7 AND MouseY <= 14) THEN ' [attack]
                      GOSUB damage
                  END IF
                  IF MouseX = 25 AND (MouseY >= 17 AND MouseY <= 24) THEN ' [defend]
                      GOSUB defend
                  END IF
                  IF MouseX = 25 AND (MouseY >= 27 AND MouseY <= 32) THEN ' [info]
                      GOSUB info
                  END IF
                  IF MouseX = 25 AND (MouseY >= 35 AND MouseY <= 47) THEN ' <esc>
                      SYSTEM
                  END IF
              END IF
          END IF
      LOOP
      END
      
      damage:
      playerdamage% = INT(RND * maxhits + 1)
      LOCATE 3, 1
      PRINT u$; " takes"; playerdamage%; "points."
      IF playerhits% - playerdamage% < 0 THEN
          playerlevel% = playerlevel% - 1%
          playerhits% = maxhits
      ELSE
          playerhits% = playerhits% - playerdamage%
      END IF
      LOCATE 2, 1
      PRINT "playerhits:"; playerhits%; "    "
      RETURN
      
      defend:
      playerdefense% = INT(RND * maxhits + 1)
      LOCATE 4, 1
      PRINT u$; " restores"; playerdefense%; "points."
      IF playerhits% + playerdefense% > hitsrequired THEN
          playerlevel% = playerlevel% + 1%
          playerhits% = maxhits
      ELSE
          playerhits% = playerhits% + playerdefense%
          IF playerlevel% <= 0 THEN playerlevel% = 1
      END IF
      LOCATE 2, 1
      PRINT "playerhits:"; playerhits%; "    "
      RETURN
      
      info:
      LOCATE 5, 1
      count = count + 1
      PRINT "Player: "; u$; ", display:"; count
      PRINT "Hits:"; playerhits%; ", level";
      IF playerlevel% <= 0 THEN
          PRINT " <dead>    "
      ELSE
          PRINT playerlevel%; "    "
      END IF
      RETURN
      

      【讨论】:

        猜你喜欢
        • 2014-07-10
        • 1970-01-01
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 2010-10-05
        • 2011-11-21
        • 1970-01-01
        相关资源
        最近更新 更多