动作脚本 3 |在不同的电影片段中找到最小数量
Actionscript 3 | find minium Number inside different movieclips
我正在尝试为飞镖玩家制作一个用户界面,其中最多 8 名玩家可以将他们的条目放入 table。我想用 "blinking movieclip" 或类似的东西突出实际的领导者。每个玩家都有自己的动画片段,暗示一个动态文本字段,用于计算结果。
我的方法只有在恰好有 4 个玩家开始游戏时才有效。
addEventListener(KeyboardEvent.KEY_DOWN, showLeader);
function showLeader(evt: KeyboardEvent): void {
var a: Number = Number(player_1_content_mc.GESAMTPUNKTZAHL_TEXT.text);
var b: Number = Number(player_2_content_mc.GESAMTPUNKTZAHL_TEXT.text);
var c: Number = Number(player_3_content_mc.GESAMTPUNKTZAHL_TEXT.text);
var d: Number = Number(player_4_content_mc.GESAMTPUNKTZAHL_TEXT.text);
if (a < d && c && b)
player_1_content_mc.LEADER01_txt.text = "LEAD"
else
player_1_content_mc.LEADER01_txt.text = ""
if (b < d && c && a)
player_2_content_mc.LEADER01_txt.text = "LEAD"
else
player_2_content_mc.LEADER01_txt.text = ""
}
谁能帮我理解为什么它不起作用?
我认为你的问题与你在比较玩家分数时采用的合乎逻辑但无法操作的捷径有关
if (a < d && c && b)
传统的做法是这样的:
if (a < d && a < c && a < b)
就这么简单!
但是,如果你最终添加了 4 个以上的玩家,这种方法就会变得很累。我建议将所有玩家添加到一个数组中并循环遍历它以测试玩家的分数。
这里是一个适用于任意数量玩家的实现。首先,您必须将所有球员的影片剪辑添加到列表中,然后您可以用最少的分数评估球员:
function showLeader(evt: KeyboardEvent):void
{
// create a list of all leaderboard movies.
var movies : Vector.<MovieClip> = new Vector.<MovieClip>();
movies.push(player_1_content_mc);
movies.push(player_2_content_mc);
movies.push(player_3_content_mc);
movies.push(player_4_content_mc);
// get minimum number of points
var minNumber : Number = Number.MAX_VALUE;
for each (var movie : MovieClip in movies)
{
var points : Number = Number(movie.GESAMTPUNKTZAHL_TEXT.text);
if (points < minNumber)
{
minNumber = points;
}
}
// mark all players which have the minimum number of points
// note: there can be more than one player with minimum number of points.
for each (var movie : MovieClip in movies)
{
var points : Number = Number(movie.GESAMTPUNKTZAHL_TEXT.text);
if (points == minNumber)
{
// set text that this player is leader
movie.LEADER01_txt.text = "LEAD";
}
else
{
// clear textbox if player was previously lead
movie.LEADER01_txt.text = "";
}
}
}
我正在尝试为飞镖玩家制作一个用户界面,其中最多 8 名玩家可以将他们的条目放入 table。我想用 "blinking movieclip" 或类似的东西突出实际的领导者。每个玩家都有自己的动画片段,暗示一个动态文本字段,用于计算结果。
我的方法只有在恰好有 4 个玩家开始游戏时才有效。
addEventListener(KeyboardEvent.KEY_DOWN, showLeader);
function showLeader(evt: KeyboardEvent): void {
var a: Number = Number(player_1_content_mc.GESAMTPUNKTZAHL_TEXT.text);
var b: Number = Number(player_2_content_mc.GESAMTPUNKTZAHL_TEXT.text);
var c: Number = Number(player_3_content_mc.GESAMTPUNKTZAHL_TEXT.text);
var d: Number = Number(player_4_content_mc.GESAMTPUNKTZAHL_TEXT.text);
if (a < d && c && b)
player_1_content_mc.LEADER01_txt.text = "LEAD"
else
player_1_content_mc.LEADER01_txt.text = ""
if (b < d && c && a)
player_2_content_mc.LEADER01_txt.text = "LEAD"
else
player_2_content_mc.LEADER01_txt.text = ""
}
谁能帮我理解为什么它不起作用?
我认为你的问题与你在比较玩家分数时采用的合乎逻辑但无法操作的捷径有关
if (a < d && c && b)
传统的做法是这样的:
if (a < d && a < c && a < b)
就这么简单!
但是,如果你最终添加了 4 个以上的玩家,这种方法就会变得很累。我建议将所有玩家添加到一个数组中并循环遍历它以测试玩家的分数。
这里是一个适用于任意数量玩家的实现。首先,您必须将所有球员的影片剪辑添加到列表中,然后您可以用最少的分数评估球员:
function showLeader(evt: KeyboardEvent):void
{
// create a list of all leaderboard movies.
var movies : Vector.<MovieClip> = new Vector.<MovieClip>();
movies.push(player_1_content_mc);
movies.push(player_2_content_mc);
movies.push(player_3_content_mc);
movies.push(player_4_content_mc);
// get minimum number of points
var minNumber : Number = Number.MAX_VALUE;
for each (var movie : MovieClip in movies)
{
var points : Number = Number(movie.GESAMTPUNKTZAHL_TEXT.text);
if (points < minNumber)
{
minNumber = points;
}
}
// mark all players which have the minimum number of points
// note: there can be more than one player with minimum number of points.
for each (var movie : MovieClip in movies)
{
var points : Number = Number(movie.GESAMTPUNKTZAHL_TEXT.text);
if (points == minNumber)
{
// set text that this player is leader
movie.LEADER01_txt.text = "LEAD";
}
else
{
// clear textbox if player was previously lead
movie.LEADER01_txt.text = "";
}
}
}