-1

我最近在这里发布了一个问题

随机生成的隧道墙不会从一个跳到另一个

这几乎可以说由于缺乏算法,我得到了一条“醉酒行走”隧道,而不是一条相关的隧道。

答案在一定程度上适用于我试图创建的内容,但我无法弄清楚如何为我的游戏正确实施算法。

我相信第一步是为成对的墙壁创建偏移量。我希望屏幕两侧出现的图像(命名为:“Left1”和“Right1”、“Left2 和“Right2”......“Left41”和 Right41”)“重新生成”稍微偏移到左或右相互连续,以在外观上产生隧道的错觉。我尝试使用答案中提供给我的代码为我的一组墙创建偏移量,但在尝试构建时几乎没有错误。它首先告诉我“Left1”的本地声明隐藏了实例变量,我相信这是因为它已经在我的函数中被声明为变量?那出现了两次..除此之外,我还有一个错误,上面写着 Assigning to 'UIImageView *__strong' 来自不兼容的类型“float”。我该如何解决这些问题?还是我在其他地方做错了什么?

由于语义问题,我不知道如何真正重新排列它,因此我有点迷失了。

我可以回答有关该计划的任何问题,以便更容易评估情况。

-(void) TunnelMovement{

    CGFloat Left1 = 14;
    for( int i = 0; i < 41; i++ ){
        CGFloat offset = (CGFloat)arc4random_uniform(2*100) - 100;
        Left1 += offset;
        Right1 = Left1 + 14;
        //...
    }
}

在尝试从给出的答案中填写空白后,这正是我在代码中所拥有的。不确定我是否放入了所有必需品或什么。谢谢你。

4

1 回答 1

0

[我可以快速更正那个错误信息,但是你试图跑,你甚至不能走路,你几乎不能爬行。Stack Overflow 是一个编程论坛,但它不是学习或教授编程的地方,人们没有耐心教授基础知识。]

如果它们是完全不同的事物,您就不能将一件事的价值分配给另一件事。在行中:

Right1 = Left1 + 14;

Right1 是 UIImageView 而 Left1 是 CGFloat,它们是完全不同的东西。Left1 只是一个简单的数字,Right1 是一个复杂的对象。

您正在尝试定位 UIImageView,因此您需要将 Left1 + 14 的值分配给 UIImageView 的一部分,该部分将定位它并且也是 CGFloat。

因此,您需要将其分配给边界或框架或中心的 x 值之类的东西,例如

Right1.center.x = Left1 + 14;

警告是因为你有两个不同的东西同名,你有 UIImageView 称为 Left1 但你有一个 CGFloat 也称为 Left1,你不应该给两个不同的东西同名 - CGFloat Left1 隐藏 UIImageView 称为 Left1 . 您应该将其称为 Left1X 或 LeftWallX 或类似名称,因为它在您的其他问题的答案中。

这只是错误和警告,如果你在这两个方面苦苦挣扎,你可能还没有准备好继续讨论如何绘制迷宫的语义。特别是,您至少需要知道边界、框架、中心、x、y、CGPoint、CGRect、CGSize 都是什么,以便完全了解要更改的值以及更改这些值对位置的影响UIImageViews。

---- 编辑 --- 对象编程 101

当你有一个像 UIImageView 这样的对象时,它就像有一所房子,房子可以有一个名字,里面有很多房间,每个房间都有一个名字,每个房间里都有很多东西。您正在尝试用新电视替换房间中的旧电视。

所以 Right1 就像一个房子

Right1.center 就像房子里的一个房间

Right1.center.x 就像房间里的电视叫做 center,在房子里叫做 Right1。

Right1 = Left1 + 14;

就像试图将新电视换成房子,而不是试图将它换成房子内房间内的电视。

这个比喻是不是太傻了?

于 2014-05-02T20:59:57.143 回答