gpt4 book ai didi

iphone - 移动棒图、 anchor 、动画或其他东西......?

转载 作者:太空狗 更新时间:2023-10-30 03:22:35 25 4
gpt4 key购买 nike

好的,所以我正在使用 cocos2d 在目标 c 中制作一个带有棒图的游戏......
不同的东西需要动画化,所以请给我一个建议来完成这些东西的运动:

  • 主角-他是左下角的弓箭手,不会四处走动,除了他会移动上半身,因为你需要改变你射击的角度......
  • 敌人 - 成群结队的棍子人物向你袭来,它们具有碰撞检测功能,并在被箭 Sprite 射中时死亡。

  • 我应该如何进行 1 和 2 移动?我应该掌握 anchor 并使用它们吗? (我真的很讨厌愚蠢的 anchor ,它们很难开始工作……但如果它们更好,我会使用它们)
    或者制作大量动画,或者是否有另一种更简单的方法将许多 Sprite 组合成一个 Action ?

    最佳答案

    我的一般建议是:永远不要修改默认的 anchorPoint (0.5f, 0.5f),除非您非常了解它的作用以及它如何帮助您完成任务。在所有其他情况下,修改 position 属性。

    特别是如果您进行基于边界框或半径的碰撞检测,修改 anchor 会适得其反。

    让我们假设您的矩形 Sprite 图像使用一个默认的 anchor ,它位于纹理的中心:

    ._______.
    | |
    | |
    | * |
    | |
    | |
    °-------°

    * 标记纹理的 anchor 。如果您将此 Sprite 放置在 (250, 100) 位置,则 Sprite 的 anchor 将位于坐标 (250, 100)。

    假设您将 anchor 移动到 (0.1f, 0.1f):
      ._______.
    | |
    . | . |
    | |
    | |
    | * |
    °-------°

    ° °

    Sprite 的位置保持在 (250, 100) 不变。 anchor 位置也不会改变。改变的是纹理如何以该点为中心。通过查看 float 点,您可以在修改 anchor 之前看到上一个图像位置。实际上,您通过修改 anchorPoint 所做的就是移动(偏移)相对于节点位置绘制节点纹理的位置。

    在上述情况下,纹理现在居中,其左下角位于节点位置上方。您不能再依赖 Sprite 的位置来标记 Sprite 图像的中心。如果您为游戏中的每个节点任意修改 anchor ,则节点的视觉表示与其位置之间不再有任何关联。因此,修改游戏对象的 anchor 是一个糟糕的设计。

    此外,旋转或缩放将始终以 anchor 为中心。在旋转或缩放节点时,修改 anchorPoint 可能会导致不良行为。

    让我们假设一个奇怪的、最坏的情况,但完全可能的情况是 anchor 不再在纹理内:
                         ._______.
    | |
    | |
    | |
    * | |
    | |
    °-------°

    这意味着该 Sprite 的位置偏移到实际图像显示位置的左侧。这可能会导致碰撞检查的差异,特别是上述情况会完全使基于半径的碰撞检查无效。这也是开发过程中会遇到的一个令人困惑的情况。

    如果您可以确保 Sprite 的位置始终位于其纹理的中心,而不是在没有调试绘图的帮助下甚至看不到的任意点,那么您的游戏开发就会容易得多。

    问题仍然是:

    您想什么时候修改 anchor ?

    我只在以下情况下这样做,并在所有其他情况下避免它:
  • 将非动画纹理与屏幕/窗口边框或类似的对齐
  • 右/左/上/下对齐标签、按钮或图像
  • 在不修改节点位置的情况下对齐修改后的图像(即艺术家更新)。

  • 1) 易于解释。假设您有一个全屏背景图像。要使其覆盖整个屏幕,您可以执行以下两项操作之一:
  • 将位置更改为:(屏幕宽度/2,屏幕
    高度/2)
  • 将 anchor 更改为 (0, 0) 又名 CGPointZero

  • 你可以想象后者更容易做到。如果您永远不会移动背景,那么这样做也很好。但是对于滚动背景,我不会更改 anchor 。

    2) 假设您的菜单系统要求各种按钮和图像与屏幕的右边框精确对齐。所有按钮和图像的宽度都不同:即玩游戏、积分、设置、更酷的游戏!

    与其计算每个图像/按钮的单独位置,不如通过将 anchorPoint 修改为 (1.0f, 0.5f) 来简单地将它们右对齐,然后将图像/按钮精确定位在屏幕宽度(和可变屏幕高度):位置 =(屏幕宽度,100)。

    让我们假设下图的位置是 (screen width, screen height/2),默认 anchor 为 (0.5f, 0.5f)。您可以看到图像的右半部分在屏幕区域之外:
    __________.
    |
    .___|___.
    | | |
    | | |
    | * |
    | | |
    | | |
    °---|---°
    |
    ----------°

    修改后的 anchorPoint 为 (1.0f, 0.5f),无论其纹理的宽度如何,图像都可以与右屏幕/窗口边框整齐地右对齐。位置保持不变:(屏幕宽度,屏幕高度/2)。
    __________.
    |
    ._______.
    | |
    | |
    | *
    | |
    | |
    °-------°
    |
    ----------°

    为了比较,如果你想在不修改anchorPoint的情况下右对齐这个图像、菜单按钮或标签,你必须根据这个公式设置它的位置:
    (screen width - contentSize.width * anchorPoint.x, screen height / 2)

    公式仍然非常简单,但是如果节点的 contentSize 发生变化(标签通常就是这种情况),它就会变得很麻烦,例如分数从 1 位数开始,但随着时间的推移增加到 2、3 和 4 位数。在这种情况下,通过修改 anchorPoint 来右对齐节点是合理的,因为它避免了每次节点的 contentSize 更改时都必须重新计算位置。

    3) 在极少数情况下,美术师向我提供了游戏对象的更新图像。图像大小发生了变化,因此它不再自然地融入游戏的图形中。另一方面,对象的位置已经通过游戏测试确定,不应更改以避免重新测试游戏。

    在这种情况下,调整 anchor 以使新图像与其他图形很好地对齐,而不影响游戏玩法是有保证的。这是一个安全的、最后一刻的修改。不要在生产阶段开始这样做,否则你将在项目的整个生命周期内陷入 anchor 调整 hell 。不要去那里!

    总结:

    仅当可以更轻松地将节点与其他节点或屏幕/窗口边框对齐,或者在不影响游戏玩法的情况下微调最终艺术时才修改 anchor 。

    在所有其他情况下, 仅使用位置来移动节点 .

    关于iphone - 移动棒图、 anchor 、动画或其他东西......?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7808981/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com