【发布时间】:2011-05-22 20:32:07
【问题描述】:
以下代码呈现具有可互换坐标的僵尸。唯一的问题是我必须自己复制代码并为每个僵尸创建新的坐标变量。有什么方法可以创建变量的副本,因此我只需为多个僵尸提供一种方法,而不是为三个僵尸提供三种方法和三个单独的变量?
int zombieyCord;
int zombiexCord;
-(void)renderZombie
{
NSBezierPath * path = [NSBezierPath bezierPath];
[path setLineWidth:4];
NSPoint center = {zombieyCord,zombiexCord};
[path moveToPoint: center];
[path appendBezierPathWithArcWithCenter:center
radius:5
startAngle:0
endAngle:360];
[[NSColor greenColor] set];
[path fill];
[[NSColor greenColor] set];
[path stroke];
}
编辑:
生成效果很好,效果很好,但我希望僵尸能够正常移动。之前的代码是在玩家移动时调用该方法。这不再有效,因为我必须在方法中调用一个整数。
+(void)entityZombie:(int)zombiexCord andY:(int)zombieyCord
{
/* Handle Zombie Movement*/
if (xcord != zombiexCord || ycord != zombieyCord)
{
if (xcord > zombiexCord){zombiexCord=zombiexCord+1;}
if (xcord < zombiexCord){zombiexCord=zombiexCord-1;}
if (ycord < zombieyCord){zombieyCord=zombieyCord-1;}
if (ycord > zombieyCord){zombieyCord=zombieyCord+1;}
/* Handle Zombie Render*/
NSBezierPath * path = [NSBezierPath bezierPath];
[path setLineWidth:4];
NSPoint center = {zombieyCord,zombiexCord};
[path moveToPoint: center];
[path appendBezierPathWithArcWithCenter:center
radius:5
startAngle:0
endAngle:360];
[[NSColor greenColor] set];
[path fill];
[[NSColor greenColor] set];
[path stroke];
}
}
玩家移动处理只涉及渲染玩家然后 [Entity entityZombie]; 但如上所述,不再有效。
【问题讨论】:
-
我是否正确地假设
{xcord, ycord}是玩家的坐标,并且您希望僵尸在每次迭代时向玩家移动一步,然后在新位置渲染? -
@Regexident 那么我该怎么做呢?
-
在这种情况下,您应该将僵尸的移动和渲染拆分为单独的方法。您可能应该重构您的代码并创建一个僵尸类,其中 NSPoint 作为其坐标的实例变量。 Zombie 类会得到一个 - (void)moveTowardsPlayerAt:(NSPoint)playerCoords;和 - (无效)平局;方法。这将使我们远离您最初的问题,并且更适合关于“简单的人类与僵尸游戏控制器”的新问题。我现在要去睡觉了,所以我只是在这里倾倒了一些示例代码:pastie.org/private/utesja0hf9poecidegj4ea :)
-
@evdude100:打开一个询问基本“简单的人类与僵尸游戏控制器设计”的问题可能是个好主意,因此(希望)有用的代码不会隐藏在粘贴链接中,但获得良好的曝光。一旦问题出现,请在此处给我留言/链接。
标签: objective-c methods multiple-instances