首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动图形用户界面,未在按钮上声明变量

自动图形用户界面,未在按钮上声明变量
EN

Stack Overflow用户
提问于 2013-09-29 13:25:42
回答 1查看 2.1K关注 0票数 1

我还在学习如何编写我自己的GUI。柯达帮了我很大的忙,我一直在胡闹,一次学习一些小东西。然而,我遇到了一个错误,我似乎无法绕开。我正在使用的当前GUI是一个简单的工具,用于更改游戏中的bot设置。此gui应该有5个按钮设置困难,并有一个复选框的数目的机器人列表。

但是,当我选择一个困难级别,机器人号,并点击保存时,我得到了以下错误:

代码语言:javascript
复制
'Variable used without being declared'  

此错误发生在这一行(botSAVE按钮在末尾):

代码语言:javascript
复制
FileWriteLine($file2, "aiSettings.setMaxNBots " & $botnum)    

我认为按钮函数'Func numClick()‘根据按下的按钮设置了这个变量,但显然我忽略了一些东西。希望这是一个简单的解决办法。有人看到是什么导致了这个错误吗?我已经在autoitcsript论坛上发布了这个问题,但是他们似乎回避了游戏自动化脚本,所以我并没有得到太多的帮助。

代码语言:javascript
复制
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=c:\users\admin\desktop\form1.kxf
$Form1 = GUICreate("Battlefield 2 Bot-Tool", 418, 499, 759, 83)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore")
$Pic1 = GUICtrlCreatePic("C:\Users\admin\Desktop\bflogo.jpg", 0, 0, 417, 233)
$Settings = GUICtrlCreateTab(8, 240, 401, 249)
GUICtrlSetOnEvent(-1, "SettingsChange")
$Bot = GUICtrlCreateTabItem("Bots")
$botSAVE = GUICtrlCreateButton("Save these changes", 220, 433, 169, 33)
GUICtrlSetOnEvent(-1, "botSAVEClick")
$botDEFAULT = GUICtrlCreateButton("Restore default settings", 28, 433, 169, 33)
GUICtrlSetOnEvent(-1, "botDEFAULTClick")
$botskill = GUICtrlCreateGroup(" Bot skill level", 28, 265, 169, 145)
$skill1 = GUICtrlCreateRadio("  RECRUIT", 44, 289, 113, 17)
GUICtrlSetTip(-1, "Easy opposition, a damn turkey shoot")
GUICtrlSetOnEvent(-1, "skill1Click")
$skill2 = GUICtrlCreateRadio("  TRAINED", 44, 313, 113, 17)
GUICtrlSetTip(-1, "Default setting, opponents are deadly at close range")
GUICtrlSetOnEvent(-1, "skill2Click")
$skill3 = GUICtrlCreateRadio("  HARDENED", 44, 337, 113, 17)
GUICtrlSetTip(-1, "Enemies are a force to be reckoned with")
GUICtrlSetOnEvent(-1, "skill3Click")
$skill4 = GUICtrlCreateRadio("  VETERAN", 44, 361, 113, 17)
GUICtrlSetTip(-1, "Enemies are experienced, and dangerous")
GUICtrlSetOnEvent(-1, "skill4Click")
$skill5 = GUICtrlCreateRadio("  ELITE", 44, 385, 113, 17)
GUICtrlSetTip(-1, "Crack shot opponents will strategize against you. You will not survive")
GUICtrlSetOnEvent(-1, "skill5Click")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$botnumber = GUICtrlCreateGroup(" Number of bots ", 220, 265, 169, 145)
$num1 = GUICtrlCreateRadio("2", 236, 289, 25, 17)
GUICtrlSetOnEvent(-1, "num1Click")
$num2 = GUICtrlCreateRadio("4", 236, 313, 25, 17)
GUICtrlSetOnEvent(-1, "num2Click")
$num3 = GUICtrlCreateRadio("6", 236, 337, 25, 17)
GUICtrlSetOnEvent(-1, "num3Click")
$num4 = GUICtrlCreateRadio("8", 236, 361, 25, 17)
GUICtrlSetOnEvent(-1, "num4Click")
$num5 = GUICtrlCreateRadio("10", 236, 385, 33, 17)
GUICtrlSetOnEvent(-1, "num5Click")
$num6 = GUICtrlCreateRadio("12", 284, 289, 33, 17)
GUICtrlSetOnEvent(-1, "num6Click")
$num7 = GUICtrlCreateRadio("14", 284, 313, 33, 17)
GUICtrlSetOnEvent(-1, "num7Click")
$num8 = GUICtrlCreateRadio("16", 284, 337, 33, 17)
GUICtrlSetOnEvent(-1, "num8Click")
$num9 = GUICtrlCreateRadio("18", 284, 361, 33, 17)
GUICtrlSetOnEvent(-1, "num9Click")
$num10 = GUICtrlCreateRadio("20", 284, 385, 33, 17)
GUICtrlSetOnEvent(-1, "num10Click")
$num11 = GUICtrlCreateRadio("24", 340, 289, 33, 17)
GUICtrlSetOnEvent(-1, "num11Click")
$num12 = GUICtrlCreateRadio("28", 340, 313, 33, 17)
GUICtrlSetOnEvent(-1, "num12Click")
$num13 = GUICtrlCreateRadio("32", 340, 337, 33, 17)
GUICtrlSetOnEvent(-1, "num13Click")
$num14 = GUICtrlCreateRadio("36", 340, 361, 33, 17)
GUICtrlSetOnEvent(-1, "num14Click")
$num15 = GUICtrlCreateRadio("40", 340, 385, 33, 17)
GUICtrlSetOnEvent(-1, "num15Click")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Server = GUICtrlCreateTabItem("Server")
$serverDEFAULT = GUICtrlCreateButton("Restore default settings", 28, 433, 169, 33)
$serverSAVE = GUICtrlCreateButton("Save these changes", 220, 433, 169, 33)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
Opt("MustDeclareVars",1)
#EndRegion ### END Koda GUI section ###

While 1
    Sleep(100)
WEnd


Func Form1Close()
  If @GUI_WINHANDLE = $Form1 Then
    Exit
  EndIf
EndFunc

Func Form1Maximize()
EndFunc

Func Form1Minimize()
EndFunc

Func Form1Restore()
EndFunc

Func num1Click()
$botnum = "2"
EndFunc

Func num2Click()
   $botnum = "4"
EndFunc

Func num3Click()
   $botnum = "6"
EndFunc

Func num4Click()
   $botnum = "8"
EndFunc

Func num5Click()
   $botnum = "10"
EndFunc

Func num6Click()
   $botnum = "12"
EndFunc

Func num7Click()
   $botnum = "14"
EndFunc

Func num8Click()
   $botnum = "16"
EndFunc

Func num9Click()
   $botnum = "18"
EndFunc

Func num10Click()
   $botnum = "20"
EndFunc

Func num11Click()
   $botnum = "24"
EndFunc

Func num12Click()
   $botnum = "28"
EndFunc

Func num13Click()
   $botnum = "32"
EndFunc

Func num14Click()
   $botnum = "36"
EndFunc

Func num15Click()
   $botnum = "40"
EndFunc

Func SettingsChange()
EndFunc

Func skill1Click()
   $skillset = "0.1"
EndFunc

Func skill2Click()
   $skillset = "0.3"
EndFunc

Func skill3Click()
   $skillset = "0.6"
EndFunc

Func skill4Click()
   $skillset = "0.8"
EndFunc

Func skill5Click()
   $skillset = "1.0"
EndFunc

Func botDEFAULTClick()
EndFunc

Func botSAVEClick()
   Local $file = FileOpen("AIDefault.ai", 1)
If $file = -1 Then
    MsgBox(0, "Protected file", "Please ensure that the file 'AIDefault.ai' is not set to Read Only.")
    exit
    EndIf
FileWriteLine($file, "aiSettings.setNSides 2 ")
FileWriteLine($file, "aiSettings.setAutoSpawnBots 1 ")
FileWriteLine($file, "aiSettings.setMaxNBots 64 ")
FileWriteLine($file, "aiSettings.maxBotsIncludeHumans 1")
FileWriteLine($file, "aiSettings.setBotSkill 0.4  ")
FileWriteLine($file, "run BotNames.ai ")
FileWriteLine($file, "aiSettings.setInformationGridDimension 32")
FileWriteLine($file, "run AIPathFinding.ai")
FileWriteLine($file, "run AIBotChanger.ai ")
FileClose($file)

$file2 = FileOpen("AIBotChanger.ai", 1)
If $file2 = -1 Then
    MsgBox(0, "Protected file", "Please ensure that the file 'AIBotChanger.ai' is not set to Read Only.")
    Exit
EndIf
FileWriteLine($file2, "aiSettings.overrideMenuSettings 1")
FileWriteLine($file2, "aiSettings.setMaxNBots " & $botnum)
FileWriteLine($file2, "aiSettings.setBotSkill " & $skillset)
FileWriteLine($file2, "aiSettings.maxBotsIncludeHumans 0")
FileClose($file2)
EndFunc  

-If任何人都会看到我做错了什么,OR有一个指向主题的链接,该主题包括用按钮单击声明变量,帮助总是很受欢迎。我发现的唯一的话题是难以置信的模糊,或者与我所寻找的略有不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 08:17:03

如果还想在函数之外使用变量值,则必须声明其作用域为全局的。因此,只需在多个函数声明之前添加一行Global $botnum (可能带有默认值).

显然,$skillset也是如此。

引发此错误是因为您使用了Opt("MustDeclareVars", 1)。但是,如果不将这些变量声明为全局变量,则无论如何都不能工作,因为该值是在函数中设置的,但在函数结束时再次丢弃。因此,当您在另一个函数中使用未初始化的它们时,始终会收到未初始化变量的默认值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19078544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档