【问题标题】:How can I create an offset on a UIImageView如何在 UIImageView 上创建偏移量
【发布时间】:2014-05-02 20:08:33
【问题描述】:

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

Randomly generated tunnel walls that don't jump around from one to the next

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

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

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

由于语义问题,我不知道如何真正重新排列它。

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

-(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;
        //...
    }
}

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

【问题讨论】:

  • 正如您已经被告知(在您已删除的帖子中),“从不兼容的类型 'float' 分配给 'UIImageView *__strong'。”是由于将 float 类型的变量分配给 UIImageView 类型的变量。由于您在几天后无法解决这个小的单行错误消息,这只能意味着您根本没有编程经验。我可以建议您在继续之前抽出时间阅读一些有关编程基础知识的基本教程,否则您将继续不理解和/或应用给您的任何答案,除非被灌输
  • 但是请随意发布显示错误的代码行,我很乐意更正它(它可能是右上角的最后一行 - 所以您也需要在此之前发布代码,一个包含声明或 Right1)
  • 错误来自 Right1 = Left1 + 14;其他 2 个黄色警告来自该行及其上方的行
  • 您需要在此之前显示代码,您必须在此处未显示的代码中将 Right1 声明为 UIImageView。
  • 是的,我已将其声明为 IBOutlet UIImageView

标签: ios methods uiimageview correlated


【解决方案1】:

[我可以快速更正那个错误信息,但是你正在尝试跑步,你甚至不能走路,你几乎不能爬行。 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。

---- EDIT --- 对象编程101

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

所以 Right1 就像一个房子

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

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

Right1 = Left1 + 14;

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

这个比喻是不是太愚蠢了?

【讨论】:

  • 好吧,所以我将那个特定方法中的 Left1 更改为 Left1X,它似乎修复了它。我现在得到的唯一红色错误是“使用未声明的标识符'Right1X'。因为我现在有这个 -(void) TunnelMovement{ CGFloat Left1X = 14; for( int i = 0; i
  • 有很多很棒的书。但它不是您需要学习的Objective C,而是一般的编程。亚马逊上有一些书籍为没有编程经验的人教授 iOS 开发。他们教授编程以及 iPhone 应用程序编写,这正是您所需要的。 Right1.center.x = ... 不是 Right1X.center.x = ...
  • 我认为它必须是别的东西,因为当我尝试使用 Right1.center.x 执行此操作时,它告诉我表达式不可分配。
  • 我在答案末尾添加了一个对象编程 101 课程部分。
  • 感谢您的帮助。显然我们已经尝试快速跳入编程!在接下来的几个月里,我将继续阅读和自我教育。另外,我只想在结束聊天之前解决这个方法。你能帮我解释一下为什么它对 Right1.center.x = Left1X + 14 的行说“表达式不可分配”吗?我相信错误在等号之下。
猜你喜欢
  • 2020-03-02
  • 2018-03-16
  • 2019-09-08
  • 1970-01-01
  • 2013-08-01
  • 2015-04-02
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多