jjzjj

iphone - 制作我自己的瓷砖系统会导致延迟

coder 2024-01-20 原文

- (void) loadStartingTiles //16 by 24
{
    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
     @"clonespritesheet.plist"];

    for(int x = 0; x < 16; x++) //minus 1 for one at the begining
    {
        for(int y = 0; y < 26; y++)
        {
            CCSprite *tempsprite;
            switch (currentscreen[x][y])
            {
                case 0:
                    tempsprite = [CCSprite spriteWithSpriteFrameName:@"block0.png"];
                break;
                case 1:
                    tempsprite = [CCSprite spriteWithSpriteFrameName:@"block1.png"];
                break;
            }
            tempsprite.position = ccp(y*20+10,(16-x)*20-10); //+10 for align for tile size
            [self addChild:tempsprite z:3];
            [tiles addObject:tempsprite];
        }
    }

}

所以我从一个 int 数组中制作了一堆 Sprite ,告诉它们应该在哪里,然后我将它们添加到 nsmutable 数组图 block 中。然后我将阵列中的所有东西慢慢地向左移动,我失去了大约 20 FPS。制作瓷砖系统的更有效方法是什么?我的目标是稍后制作随机生成的图 block 。

- (void) manageTiles:(CGFloat)dt
{
    int tileamount = [tiles count];
    for(int i = 0; i < tileamount; i++)
    {
        CCSprite *tempsprite = [tiles objectAtIndex:i];
        tempsprite.position = ccp(tempsprite.position.x-20*dt,tempsprite.position.y);
    }
}

编辑:遮阳篷是

int themap = -20;
- (void) manageTiles:(CGFloat)dt
{
    tiles.position = ccp(tiles.position.x-10*dt,tiles.position.y);

    NSLog(@"%d",themap);
    if(tiles.position.x < themap)
    {
        CCSprite *tempsprite;
        for(int i = 0; i < 16; i++)
        {
            [tiles removeChildAtIndex:0 cleanup:YES];
        }
        for(int i = 0; i < 16; i++)
        {
            switch (tilewall[i])
            {
                case 0:
                    tempsprite = [CCSprite spriteWithSpriteFrameName:@"block1.png"];
                    break;
                case 1:
                    tempsprite = [CCSprite spriteWithSpriteFrameName:@"block1.png"];
                    break;
            }
            tempsprite.position = ccp((themap*-1)+500+10,((16-i)*20-10));
            [tiles addChild:tempsprite];
        }
        themap = themap-20;
    }
}

最佳答案

您出错的地方是,您没有使用 CCSpriteBatchNode。 CCSpriteBatchNode 将在一次绘制操作中绘制所有图 block ,而不是对每个图 block 执行一次绘制操作。缺点是,批处理节点中的每个图 block 都将具有相同的 zOrder(在某种程度上),并且每个批处理节点都必须使用一个源 spritesheet。所以基本上,如果您想要不同 zOrders 的不同层,或者不同层使用不同源图像的图 block ,您将必须创建多个批处理节点,每个节点一个。

http://www.cocos2d-iphone.org/api-ref/0.99.5/interface_c_c_sprite_batch_node.html

关于iphone - 制作我自己的瓷砖系统会导致延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627132/

有关iphone - 制作我自己的瓷砖系统会导致延迟的更多相关文章

  1. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  2. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  3. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  4. ruby-on-rails - 在所有延迟的作业之前 Hook - 2

    是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述

  5. ruby - 从另一个私有(private)方法中使用 self.xxx() 调用私有(private)方法 xxx,导致错误 "private method ` xxx' called” - 2

    我正在尝试获得良好的Ruby编码风格。为防止意外调用具有相同名称的局部变量,我总是在适当的地方使用self.。但是现在我偶然发现了这个:classMyClass上面的代码导致错误privatemethodsanitize_namecalled但是当删除self.并仅使用sanitize_name时,它会起作用。这是为什么? 最佳答案 发生这种情况是因为无法使用显式接收器调用私有(private)方法,并且说self.sanitize_name是显式指定应该接收sanitize_name的对象(self),而不是依赖于隐式接收器(也是

  6. ruby-on-rails - 如何测试自己对 Ruby/ROR 的了解? - 2

    是否有self验证的问题列表。看着那个,我可以确定我知道。我应该复习一下。在学习的过程中,我列了一个这样的list,但它只包含我在某处听说过的项目。我需要一段时间才能找到新的东西。 最佳答案 以下是针对ruby​​和Rails的一些测试列表。证书名称:RubyonRails谁提供:oDeskIncorporation认证费用:免费网站:https://www.odesk.com/tests/985?pos=0证书名称:RubyonRails提供者:Techgig.com(TimesBusinessSolutionsLimited(T

  7. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

  8. ruby-on-rails - 什么会导致与 APNS 的连接间歇性断开连接? - 2

    我有一个ruby​​脚本可以打开与Apple推送服务器的连接并发送所有待处理的通知。我看不出任何原因,但当Apple断开我的脚本时,我遇到了管道损坏错误。我已经编写了我的脚本来适应这种情况,但我宁愿只是找出它发生的原因,这样我就可以在第一时间避免它。它不会始终根据特定通知断开连接。它不会以特定的字节传输大小断开连接。一切似乎都是零星的。您可以在单个连接上发送的数据传输或有效负载计数是否有某些限制?看到人们的解决方案始终保持一个连接打开,我认为这不是问题所在。我看到连接在3次通知后断开,我看到它在14次通知后断开。我从未见过它能超过14点。有没有人遇到过这种类型的问题?如何处理?

  9. ruby - Heroku - 如何开始工作人员(延迟工作)? - 2

    我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs:

  10. ruby - 如何在ruby中制作动态多维数组? - 2

    我有一个关于多维数组的初学者ruby​​问题。我想按年份和月份对条目进行排序。所以我想创建一个包含年->月->月条目的多维数组所以数组应该是这样的:2009->08->Entry1->Entry209->Entry32007->10->Entry5现在我有:@years=[]@entries.eachdo|entry|timeobj=Time.parse(entry.created_at.to_s)year=timeobj.strftime("%Y").to_imonth=timeobj.strftime("%m").to_itmparr=[]tmparrentry}@years.pu

随机推荐