如何通过Monopoly式棋盘游戏中的所有方块遍历挂钩?
我已经为movepegbutton编写了一个函数,在单击时将peg移动到从随机生成的数字中获取的目标位置。
这是我到目前为止为Move peg Button写的内容。
(IBAction)movePegButton:(id)sender
{
self.pegDestinationPositionIndex = self.pegCurrentPositionIndex + self.randomNumber;
if (self.pegDestinationPositionIndex > [self.boardCordinatesArray count] - 1)
{
self.pegDestinationPositionIndex = self.pegDestinationPositionIndex - [self.boardCordinatesArray count];
}
[self animatePeg];
self.pegCurrentPositionIndex = self.pegDestinationPositionIndex;
}
这就是我写的动画钉片。
(void)animatePeg
{
int destinationXCord = [[[self.boardCordinatesArray objectAtIndex:self.pegDestinationPositionIndex] objectForKey:@"x"]intValue];
int destinationYCord = [[[self.boardCordinatesArray objectAtIndex:self.pegDestinationPositionIndex] objectForKey:@"y"]intValue];
[UIView animateWithDuration:1.0 animations:^{
self.peg.center = CGPointMake(destinationXCord, destinationYCord);
}];
}
到目前为止,钉子正确地移动到目的地方格,但它没有穿过所有方格,例如如果它是8X8平方,对于第一次运行的骰子滚动6,挂钩正确移动到第6个方格,对于第二次运行骰子滚动5,挂钩正确地移动到目标方块但它直接跳到对角线的那个位置,它没有遍历它所带来的方块。
我被困在这里,我该怎么做?
答案 0 :(得分:0)
所以你的挂钉应该走在一个正方形,ei。按照董事会的边缘,但改为削减角落,我是对的吗?
如果我是这样,那么答案非常直截了当。为了确保挂钩跟随板上的正方形,你必须移动到从源方到目标方的路径中的每个方格,否则它将简单地切割角落并直接前往目的地方块。
如果玩家掷出一个4,并且站在9号方位并且必须到达13号方位。那么我会强制挂钩首先移动到10,然后是11,然后是12然后在最后的方格13
当然如果方块在方形庄园中对齐,那就是;四个边缘,然后可以进行一些优化,只有在角源位于源方块和目标方块之间时才分割路径。
当然,这种优化也可以应用,即使方块没有像庄园那样对齐,只要它遵循一些路径,你知道'角落'在哪里。
编辑:
为了尝试测试我的绘画技巧并尝试可视化手头的问题,我在绘画中创造了一些东西。
您在演示代码中所做的是案例1 。移动挂钩时,您正在执行单个动画。你真正想做的是案例2 ,这里你的函数-(void)animatePeg;
应该认识到目标广场距离超过1平方,因此不能做单移动动画,但一系列移动动画,更准确地说,动画的数量总是indexOfDestinationSquare - indexOfSourceSquare
。因此,在图示的情况下,peg应该总共执行八个移动动画而不是仅一个。
案例3 显示了如何通过识别移动的方向来优化此过程,并且仅在转弯时分割。
我希望这能说明我会采取什么方法。要执行此方法,您需要扩展-(void)animatePeg;
函数,以便能够将单个移动拆分为一系列移动,然后逐个设置动画。