【发布时间】:2013-01-06 14:22:24
【问题描述】:
我最近一直在从事一个 ActionScript 3 纸牌游戏项目,我遇到了事件处理程序的问题,我发现这有点复杂。我会试着解释一下:
轮流出牌的玩家数量不定。在他们这样做之后,他们将轮到他们右边的玩家。
function Round(table:Table, lead:Player)/*Table is the list of players.
Lead is the person that starts the round*/
{
private var query:int = 0;
private var roundEnd:Boolean = false;
private var currentplater:Player = lead;
while(roundEnd == false)
{
query = currentPlayer.hasTurn();/*I'll explain this one later. It's
the problematic one*/
//Game stuff happens.
currentPlayer = currentPlayer.nextPlayer;/*Once the turn is over,
it gets assigned to the next player*/
if(currentPlayer.nextPlayer == lead)
{
roundEnd = true;//Everyone has played
}
}
}
正如那里评论的那样,复杂的是hasTurn。该函数必须从 Player 类激活并触发玩家处理事件并返回整数值的权限。
public function hasTurn():int
{
for each(var cards:Card in hand)
{
cards.addEventListener(MouseEvent.CLICK, playCard);
}
}
然后
public function playCard(theCard:Card)
{
for each(var cards:Card in hand)
{
cards.removeEventListener(MouseEvent.CLICK, playCard);
}
//More game stuff happens. Not currently relevant.
}
我在这里所做的是允许玩家手中的每张牌都被打出,然后在其中一张牌被打出时取消这些权限,但我永远不会将值返回给 Round,更重要的是,我无法让下一个玩家稍后玩。我已经在脑海中多次解决这个问题,但似乎无法找到让hasTurn 返回值或结束其执行的方法,因此Round 代码可以继续工作。我是否以错误的方式处理这个问题的逻辑?
【问题讨论】:
-
注意:我不确定这个问题是否足够清楚。我已尽最大努力传达此类特定问题的性质,但请告诉我是否必须编辑帖子。谢谢
-
你正在做的事情是完全错误的——你不能使用 while 或其他循环来进行游戏执行循环(它不是 JAVA)——仅仅是因为在 flash 循环中停止执行/渲染所有内容,直到它完成。它可能会起作用 - 循环 - 如果它是一个输入帧循环。
-
@Lukasz'Severiaan'Grela 有趣。我会调查的。我可以使用什么路径来解决这个不涉及循环的问题?
-
现在进入游戏 - 在您的示例中,theCard 不是来自任何东西,循环建议它应该在那里填充它的值,其次是对于您没有在每张卡上注册它的卡的点击事件作为点击气泡,可以由单个听众咳嗽。您不必在每个循环中注册它,除非单击后您打算取消注册。从事件处理程序中,您不能返回任何值,但您可以为另一个将从 playCard 分派的事件注册。 hasTurn 在你的例子中并没有做太多,但它是一个简单的函数,所以它可以返回值
-
@Lukasz'Severiaan'Grela theCard 是卡片。已经解决了。除此之外,嗯......我知道这个逻辑有问题。这就是我问的原因。我的主要目标是至少留下足够好的伪代码让人们理解我的目标......
标签: actionscript-3 events event-handling logic return