《How To Make a Tile-Based Game with Cocos2D 2.X》用cocos2d V3制作本教程

2024-04-17

我有一个小问题。在本教程中如何使用 Cocos2D 2.X 制作基于图块的游戏 http://www.raywenderlich.com/29458/how-to-make-a-tile-based-game-with-cocos2d-2-x使用cocos2d V2.0,我想在cocos2d V3.0中制作这个。所以,这是行不通的!谢谢! (我不会说英语)

我认为这一行有问题 - self.position = viewPoint;

@property (strong) CCTiledMap *tileMap;
@property (strong) CCTiledMapLayer *background;
@property (strong) CCSprite *player;



- (id)init
{
    // Apple recommend assigning self with supers return value
    self = [super init];
    if (!self) return(nil);

    // Enable touch handling on scene node
    self.userInteractionEnabled = YES;

    self.tileMap = [CCTiledMap tiledMapWithFile:@"TileMap.tmx"];
    self.background = [_tileMap layerNamed:@"Background"];
    [self addChild:_tileMap z:-1];

    CCTiledMapObjectGroup *objectGroup = [_tileMap objectGroupNamed:@"Objects"];
    NSAssert(objectGroup != nil, @"tile map has no objects object layer");

    NSDictionary *spawnPoint = [objectGroup objectNamed:@"SpawnPoint"];
    int x = [spawnPoint[@"x"] integerValue];
    int y = [spawnPoint[@"y"] integerValue];

    _player = [CCSprite spriteWithImageNamed:@"Player.png"];
    _player.position = ccp(x,y);

    [self addChild:_player];
    [self setViewPointCenter:_player.position];

    // done
    return self;
}


- (void)setViewPointCenter:(CGPoint) position {

    CGSize winSize = [CCDirector sharedDirector].viewSize;

    int x = MAX(position.x, winSize.width/2);
    int y = MAX(position.y, winSize.height/2);
    x = MIN(x, (_tileMap.mapSize.width * _tileMap.tileSize.width) - winSize.width / 2);
    y = MIN(y, (_tileMap.mapSize.height * _tileMap.tileSize.height) - winSize.height/2);
    CGPoint actualPosition = ccp(x, y);

    CGPoint centerOfView = ccp(winSize.width/2, winSize.height/2);
    CGPoint viewPoint = ccpSub(centerOfView, actualPosition);

    self.position = viewPoint;
}

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchLocation = [touch locationInView:touch.view];
    touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
    touchLocation = [self convertToNodeSpace:touchLocation];

    CGPoint playerPos = _player.position;
    CGPoint diff = ccpSub(touchLocation, playerPos);

    if ( abs(diff.x) > abs(diff.y) ) {
        if (diff.x > 0) {
            playerPos.x += _tileMap.tileSize.width;
        } else {
            playerPos.x -= _tileMap.tileSize.width;
        }
    } else {
        if (diff.y > 0) {
            playerPos.y += _tileMap.tileSize.height;
        } else {
            playerPos.y -= _tileMap.tileSize.height;
        }
    }

    CCLOG(@"playerPos %@",CGPointCreateDictionaryRepresentation(playerPos));

    // safety check on the bounds of the map
    if (playerPos.x <= (_tileMap.mapSize.width * _tileMap.tileSize.width) &&
        playerPos.y <= (_tileMap.mapSize.height * _tileMap.tileSize.height) &&
        playerPos.y >= 0 &&
        playerPos.x >= 0 )
    {
        [self setPlayerPosition:playerPos];
    }

    [self setViewPointCenter:_player.position];
    NSLog(@"%@", NSStringFromCGPoint(touchLocation));
}

-(void)setPlayerPosition:(CGPoint)position {
    _player.position = position;
}

问题是用户交互的区域默认绑定到contentSize场景(屏幕尺寸)。

当打电话给你的setViewPointCenter方法,您将场景位置移出不处理触摸事件的区域。

你必须扩展这个区域contentSize像这样的平铺地图:

[self setContentSize:[_tileMap contentSize]];
self.userInteractionEnabled = YES;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《How To Make a Tile-Based Game with Cocos2D 2.X》用cocos2d V3制作本教程 的相关文章

  • 为什么我的 tableView 函数运行了 3 次?

    我有一个 UITableView 并且有执行它所需的方法之一 func tableView tableView UITableView numberOfRowsInSection section Int gt Int println sec
  • SpriteKitPhysicsBody非矩形碰撞

    pipeUp physicsBody SKPhysicsBody rectangleOfSize pipeUp size 在此编码中我使用了rectangleOfSize对于碰撞物理体 但如果我想按像素仅使用图像的形状 我应该使用什么而不是
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • Obj-C / Swift 项目中的致命陷阱异常

    我开始将 Swift 代码集成到我的 Obj C 项目中 一切都进展顺利 但今天 当我更新到 Xcode 6 1 时 事情变得很糟糕 我从之前运行良好的 Swift 代码中收到了许多 陷阱 异常 第一次崩溃位于我的 UIFont 扩展中 这
  • 如何消除禁用的 UIButton 的灰色外观

    我有一个 UIButton 我希望它处于禁用状态时与处于正常状态时看起来完全相同 现在它看起来有点灰色 不要使用enabled属性或setEnabled NO方法 而是使用 myButton setUserInteractionEnable
  • Objective-C 中 typedef 枚举语句在哪里?

    我担心的一个基本问题 以下代码有效 并且 typedef 枚举被识别 但我收到一条警告消息 空声明中无用的存储类说明符 我在这里做错了什么吗 这是放置 typedef 枚举的最佳位置吗 import
  • ARC 可以与 Core Graphics 对象一起使用吗?

    我最近开始了一个使用自动引用计数 ARC 的新项目 当我分配 CALayer 的内容时 UIView view UIImage image view layer contents image CGImage 我收到一个错误 ARC 不允许将
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 box2d 中停止作用在物体上的力

    我正在 iPhone 上使用 box2d 来创建游戏 我的身体受重力影响向下移动 而不是向右或向左移动 它会被另一个物体击中 然后向右或向左移动 然后我有一个重置按钮 可以将身体移回到起点 唯一的问题是它仍在向右或向左移动 如何抵消球已经行
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • Facebook iOS SDK:登录 Facebook 时无需总是询问应用程序的权限

    我在我的应用程序中使用 Facebook iOS SDK 我有两个类似的问题 有没有办法知道当前是否有用户登录 我现在使用的是在成功登录时存储访问令牌和到期日期 并在应用程序启动时加载它们 我的问题是 如果会话无效 我可以为用户提供登录选项
  • 斯威夫特/iOS。从导航堆栈中删除一些视图控制器

    这是我想做的 但我不确定这是否是正确的方法 所以请给我建议如何去做 我有初始 VC 和导航 VC 我从中推送第一个 VC 从中推送第二个 VC 接下来我介绍 来自第二个 VC 的 NavigationController 第三个 VC 现在
  • ios 如何存储用户输入的详细信息并取回?

    How to Store用户输入的详细信息和Get it Back在ios中 我有以下关注TextFields UserName Email Re enter Email id Phone State Address Localityand
  • 观察 UIDatePicker 的变化

    我注意到没有委托来观察 UIDatePicker 中的变化 有没有一种方法可以在不确认任何内容的情况下检测选择器中何时进行更改 例如它旋转并落在新数字上的那一刻 我希望能够检测到这一点 我考虑过关键值观察 但我不认为有一个属性会立即改变 您
  • 如何在 UITableViewCell 上使用自定义初始值设定项?

    我有一个自定义 UITableViewCell 我想在我的表视图中使用它 这是我的单元格代码 class ReflectionCell UITableViewCell IBOutlet weak var header UILabel IBO
  • 应用程序被终止时是否会收到 iOS 静默通知

    当发送后台推送时 content available 1 对于被用户杀死的应用程序 该应用程序不会启动到后台模式 并且application didReceiveRemoteNotification fetchCompletionHandl
  • 如何按字母顺序对 NSMutable 数组中的自定义对象字段进行排序?

    我有一个自定义对象 例如 import

随机推荐

  • 如何在同一个列表上迭代多个资源?

    这里是 Terraform 的新手 我正在尝试使用 Terraform 创建多个项目 在 Google Cloud 中 问题是我必须执行多个资源才能完全建立一个项目 我试过count 但是如何使用顺序绑定多个资源count 以下是我需要为每
  • 从 data.frame 中的现有变量创建几个新的派生变量

    在 R 中 我有一个 data frame 其中有几个变量 这些变量是多年来每月测量的 我想得出每个变量的月平均值 使用所有年份 理想情况下 这些新变量将全部放在一个新的 data frame 中 继承 ID 下面我只是将新变量添加到 da
  • MultipartEntityBuilder 和 setCharset for UTF-8 发送空内容

    我需要将 unicode 字符提交到表单 以将我的应用程序本地化到使用非拉丁字母的国家 地区 关于新的 MultiPartEntityBuiler 的文档很少 我只找到了另一篇建议使用 setCharset 的帖子 如果我不使用 Entit
  • 从 mongoose 'toJSON' 支持中删除一个属性

    我正在使用 mongoose 的 toJSON 支持 如下所示 userSchema set toJSON getters true virtuals true minimize false 现在 在猫鼬对象的 toJSON 方法调用返回的
  • 使用 Office.js 在桌面 Excel 上呈现数据,但在 Chrome Office 365 上,它会给出错误“处理请求时出错”。

    我们正在使用办公js在 Excel 上呈现数据的库 有超过2000行效果很好桌面Excel 但当同样API用于Chrome 办公室 365它给出错误消息 有一个错误处理请求 请参阅随附的屏幕截图 随着数据变大 Chrome Office E
  • 如何获取hive中的数据库用户名和密码

    正在编写jdbc程序来连接hive数据库 我希望在连接 url 中提供用户名和密码 我不知道如何使用 hive QL 获取用户名和密码 有人可以帮我吗 Exception in thread main java sql SQLNonTran
  • 如何向 CPBarPlot 条形图添加标签?

    我对 Core Plot 完全陌生 并且有一个可用的条形图 但视觉效果对我来说有点无用 除非我知道每个条形中代表哪个对象 我看到有一个名为 fieldIdentifiers 的方法 但不知道如何实现它 也找不到任何文档 如果这甚至是正确的方
  • 禁用 ActionBar RTL 方向

    Android 4 2 引入了 RTL BiDi 支持 要开始使用它 我只需按照说明进行操作 清单文件中元素的 android supportsRtl 属性并将其设置为 true 但随后我的 ActionBar 徽标也将方向更改为右侧 徽标
  • 未使用 QueryString id 参数

    我有一个非常基本的 ASP Net MVC 项目 我想在我的控制器操作之一上使用 id 参数名称 从我读过的所有内容来看 这应该不是问题 但由于某种原因 使用 id 参数名称无法获取从查询字符串中提取的值 但如果我将其更改为任何其他不同的名
  • 获取第n行文本输出

    我有一个每次生成两行作为输出的脚本 我真的只对第二行感兴趣 此外 我只对第二行一对 之间出现的文本感兴趣 此外 在散列之间还使用另一个分隔符 A 如果我还可以分解以 A 分隔的文本的每个部分 那就太好了 请注意 A 是 SOH 特殊字符 可
  • PowerShell,用另一种文化格式化值

    PowerShell 中有没有一种简单的方法可以在另一个语言环境中格式化数字等 我目前正在编写一些函数来简化我的 SVG 生成和 SVG 使用 作为小数点分隔符 而 PowerShell 遵循我的区域设置 de DE 将浮点数转换为字符串时
  • 检索 Windows 10 电源模式滑块的状态

    是否有任何 API 可以检索 Windows 10 电源模式滑块的状态 我在看Windows System Power名称空间 https learn microsoft com en us uwp api windows system p
  • GitHub Actions 工作流程错误:运行命令超时!即使剧本做得很好

    每次提交到存储库时 我想在远程服务器上部署 Nuxt js 应用程序 这是我的deploy yml name Deployment on push branches master jobs deploy name Deploy runs o
  • 分配多个 JsonProperty?

    我正在尝试创建一个包含来自 Facebook 和 Twitter 的信息的单个数据类 但在我来自 Twitter 的 JSON 回复中我需要id str我从 Facebook 得到id 我需要将这两个放入id 细绳 现在我知道我可以使用 J
  • WooCommerce:如何在价格和促销价格之前添加文本?

    我已成功地让文本显示在价格之前和促销价格之前 但文本被视为价格的一部分 而不是与其分开 Placing ins before content Betty s price color 000 font size 14px 在我的自定义 CSS
  • Flutter 嵌套行 MainAxisAlignment

    我想做这个 但这是我实际得到的 这是我的代码 Row itemTransaction BuildContext context Transaction transaction This is the function that will b
  • 如何配置 android 测试目录?

    Android gradle 构建强制我的 AndroidTests 位于 src androidTests 中 如何将其更改为我选择的另一个目录 这是一些背景 我正在从 eclipse 迁移一个项目 根据构建文档 当我将其添加到我的 gr
  • 重新启动 Vaadin 应用程序时抛出 java.io.NotSerializedException

    当我重新启动 Tomcat 时 出现以下错误 2014 10 01 15 49 47 055 WARN com vaadin event ListenerMethod localhost startStop 2 Error in seria
  • 如何判断一个对象是否是 Mockito 模拟对象?

    是否可以在代码中判断给定对象是否是 Mockito 模拟对象 我想这样做的原因是在使用模拟时返回不同的错误消息 这将用于向其他开发人员建议他们应该使用预先准备的模拟 该模拟已经设置为以有用的方式应答呼叫 而不是自己创建模拟 目前我拥有的最好
  • 《How To Make a Tile-Based Game with Cocos2D 2.X》用cocos2d V3制作本教程

    我有一个小问题 在本教程中如何使用 Cocos2D 2 X 制作基于图块的游戏 http www raywenderlich com 29458 how to make a tile based game with cocos2d 2 x使