If语句重复直到循环

问题描述 投票:0回答:1

我正在使用SwinGame库创建一个切换按钮。现在,我正在努力使它切换。那看起来像这样:

var
  clr: Color;
  clicked: Boolean;
  boolcheck: String;
begin
    OpenGraphicsWindow('Toggle button test', windowsWidth, windowsHeight); 
    clr := ColorWhite;
    clicked := true;
    boolcheck := 'true';
    repeat 
        ClearScreen(clr);
        ProcessEvents();
        //Play button and Pause button
        if (ButtonClicked(buttonX-buttonRadius, buttonY-buttonRadius, buttonRadius*2, buttonRadius*2) = true) and (clicked = true) then 
            begin
                clr := ColorRed;
                clicked := false;
                boolcheck := 'false';
                DrawAButton();
            end
        else if (ButtonClicked(buttonX-buttonRadius, buttonY-buttonRadius, buttonRadius*2, buttonRadius*2) = true) and (clicked = false) then
            begin
                clr := ColorBlue;
                clicked := true;
                boolcheck := 'true';
                DrawADifferentButton();
            end;
        DrawText(echo, ColorBlack, 'arial.ttf', 14, 55, 55);
        RefreshScreen();
    until WindowCloseRequested();
end;

[基本上,我打算这样做,如果用户通过ButtonClicked()(SwinGame函数)单击窗口的此区域,并且clicked变量为false,则背景颜色将为红色,否则为蓝色。但是由于某种原因,我只能将其更改为红色,而蓝色根本没有出现。我通过创建boolcheck变量进行了一些故障排除,但我发现该变量一直处于true状态,​​我确实看到它在几分之一秒内变为false然后又恢复为true。...但是我没有将clicked循环内的变量初始定义,为什么它不保持为假?

编辑:这是ButtonClicked功能的定义

function ButtonClicked(posX, posY: Single; w, h: Integer): Boolean; 
var 
    x, y: Single;
begin 
    x := MouseX(); 
    y := MouseY();
    result := false;

    if MouseClicked(LeftButton) then 
    begin 
        if (x >= posX) and (x <= w + posX) and (y >= posY) and (y <= h + posY) then 
        begin 
            result := true; 
        end; 
    end; 
end;
pascal swingame
1个回答
0
投票

好吧,感谢@lurker的建议,我已经解决了。花了一些时间思考@lurker的建议后,我意识到,一旦重置该过程,它将以clicked再次为0开始。因此,我要做的是使ButtonClicked检查一个返回10truefalse的函数。这样,Main()将始终被更新,并且始终单击0都不会重置该过程。

clicked
© www.soinside.com 2019 - 2024. All rights reserved.