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