Actionscript 中的单词随机化
Word randomization in Actionscript
在 Actionscript 中,我试图找到一种生成字符串和字符串变量的方法,这些字符串和字符串变量每次出现时都会输出不同的文本。纯粹形象化:
var text:String "Red||Blue"; //Whenever the variable is called, it's either Red or Blue
textoutput("You spot a grey||black cat."); //A function equivalent of the same issue
我可以生成一个函数来实现这种效果,但据我所知,变量似乎不能是函数。
我考虑过数组变量,但我不知道如何在调用变量时使用数组吐出单个条目,而且我不知道如何使这个字符串工作'一个变量 -- 假设我可以摆脱适用于两种情况的单一系统。
编辑
为了扩展蝙蝠侠回答中表达的问题,将他的结果用于变量会产生 'sticks' 随机选择的结果。示例:
var shoes:String = grabRandomItem("Red shoes||Crimson shoes");
trace("You have " + shoes + ".") //Whichever result is chosen it stays that way.
此外,我可能想将此变量更改为完全非随机的其他变量:
var secondshoes:String = "Blue shoes";
function newshoes():
{
shoes = secondshoes;
}
您需要从可能值列表中随机选择一个值。您可以动态引用它而不是调用变量...
function random(low:Number=0, high:Number=1):Number {
/* Returns a random number between the low and high values given. */
return Math.floor(Math.random() * (1+high-low)) + low;
}
var options:Array = ["red", "blue", "grey", "black"];
trace("You spot a " + options[random(0, options.length-1)] + " cat.")
//You spot a black cat.
或者,您可以使用函数代替变量来删除内联逻辑...
function catColor():String { return options[random(0, options.length-1)]; }
trace("You found a " + catColor() + " key.")
// You found a red key.
或者将其概括为带参数的泛型函数。
var options:Object = {
"cat":["grey", "black"],
"key":["gold", "silver"],
"door":["blue", "red", "green"]
}
function get(item:String):String {
return options[item][random(0, options[item].length-1)];
}
trace("You found a " + get("door") + " door.")
// You found a green door.
有很多方法可以做到这一点,但为了与您喜欢的方式保持一致,这里是实现此目的的最简单方法:
//populate your string: (remove the word private if using timeline code)
private var text_:String = "Red||Blue||Green||Yellow";
//create a getter to use a function like a property
function get text():String {
//create an array by splitting the text on instances of ||
var arr:Array = text_.split("||");
//return a random element of the array you just made
return arr[Math.floor(Math.random() * arr.length)];
}
trace(text);
更好的是,创建一个通用函数来解析您的字符串:
function grabRandomItem(str:String):String {
var arr:Array = str.split("||");
return arr[Math.floor(Math.random() * arr.length)];
}
//make a getter variable that regenerates everytime it's called.
function get label():String {
return "You spot a " + grabRandomItem("grey||black||blue||red||purple") + " cat";
}
trace(label); //anytime you access the label var, it will re-generate the randomized string
trace(label);
trace(label);
trace(label);
// ^^ should have different results
当然,我认为这种方式只有在文本来自用户输入时才最有效。如果您将文本硬编码到应用程序中,您不妨直接在数组中创建它,如 所示,因为这样涉及的开销较少。
在 Actionscript 中,我试图找到一种生成字符串和字符串变量的方法,这些字符串和字符串变量每次出现时都会输出不同的文本。纯粹形象化:
var text:String "Red||Blue"; //Whenever the variable is called, it's either Red or Blue
textoutput("You spot a grey||black cat."); //A function equivalent of the same issue
我可以生成一个函数来实现这种效果,但据我所知,变量似乎不能是函数。
我考虑过数组变量,但我不知道如何在调用变量时使用数组吐出单个条目,而且我不知道如何使这个字符串工作'一个变量 -- 假设我可以摆脱适用于两种情况的单一系统。
编辑
为了扩展蝙蝠侠回答中表达的问题,将他的结果用于变量会产生 'sticks' 随机选择的结果。示例:
var shoes:String = grabRandomItem("Red shoes||Crimson shoes");
trace("You have " + shoes + ".") //Whichever result is chosen it stays that way.
此外,我可能想将此变量更改为完全非随机的其他变量:
var secondshoes:String = "Blue shoes";
function newshoes():
{
shoes = secondshoes;
}
您需要从可能值列表中随机选择一个值。您可以动态引用它而不是调用变量...
function random(low:Number=0, high:Number=1):Number {
/* Returns a random number between the low and high values given. */
return Math.floor(Math.random() * (1+high-low)) + low;
}
var options:Array = ["red", "blue", "grey", "black"];
trace("You spot a " + options[random(0, options.length-1)] + " cat.")
//You spot a black cat.
或者,您可以使用函数代替变量来删除内联逻辑...
function catColor():String { return options[random(0, options.length-1)]; }
trace("You found a " + catColor() + " key.")
// You found a red key.
或者将其概括为带参数的泛型函数。
var options:Object = {
"cat":["grey", "black"],
"key":["gold", "silver"],
"door":["blue", "red", "green"]
}
function get(item:String):String {
return options[item][random(0, options[item].length-1)];
}
trace("You found a " + get("door") + " door.")
// You found a green door.
有很多方法可以做到这一点,但为了与您喜欢的方式保持一致,这里是实现此目的的最简单方法:
//populate your string: (remove the word private if using timeline code)
private var text_:String = "Red||Blue||Green||Yellow";
//create a getter to use a function like a property
function get text():String {
//create an array by splitting the text on instances of ||
var arr:Array = text_.split("||");
//return a random element of the array you just made
return arr[Math.floor(Math.random() * arr.length)];
}
trace(text);
更好的是,创建一个通用函数来解析您的字符串:
function grabRandomItem(str:String):String {
var arr:Array = str.split("||");
return arr[Math.floor(Math.random() * arr.length)];
}
//make a getter variable that regenerates everytime it's called.
function get label():String {
return "You spot a " + grabRandomItem("grey||black||blue||red||purple") + " cat";
}
trace(label); //anytime you access the label var, it will re-generate the randomized string
trace(label);
trace(label);
trace(label);
// ^^ should have different results
当然,我认为这种方式只有在文本来自用户输入时才最有效。如果您将文本硬编码到应用程序中,您不妨直接在数组中创建它,如