仅在cocos2d中使用视网膜图像(Use only retina images in cocos2d)

我正在使用2张图片:image.png和image-hd.png,它也适用于视网膜和非视网膜。 但我现在要做的是去除所有非视网膜图像,只留下视网膜图像。 我听说非视网膜设备会将图像缩小。 我尝试了但它不起作用:(我是怎么做的?我应该给图像一个什么名字,它会显示图片在视网膜上的实际大小和非视网膜将缩小?


I am using 2 images: image.png and image-hd.png and it works fine for retina and non-retina too. But what I want to do now is to remove all non-retina images and leave only retina images. I heard that a non-retina device will scale the image down itself. I tried it but it didn't work :( How I do this? What name should I give to the image that it will show picture its actually size on retina and for non-retina will be scaled down?


原文:https://stackoverflow.com/questions/12034882
2021-12-02 20:12

满意答案

不,Retina图像不会自动缩小。

仅使用Retina图像并在标准分辨率显示设备上按比例缩小图像是一个坏主意。

  • 非Retina设备的内存远远少于Retina设备,但是你强迫它们加载Retina分辨率图像。 换句话说:设备有一半的内存,但被迫加载的图像消耗的纹理内存是需要的四倍。
  • 非Retina设备的GPU和CPU速度较慢。 但是你强迫他们使用像素数的四倍。 性能受损。

  • No, Retina images are not scaled down automatically.

    Only using Retina images and using them scaled down on standard resolution display devices is a bad idea.

  • Non-Retina devices have far less memory than Retina devices, but you're forcing them to load the Retina resolution images. In other words: device has half the memory, but is forced to load images that consume four times as much texture memory as need be.
  • Non-Retina devices have slower GPU & CPU. But you're forcing them to work on four times the number of pixels. Performance suffers.
  • 相关问答

    更多

    仅在cocos2d中使用视网膜图像(Use only retina images in cocos2d)

    不,Retina图像不会自动缩小。 仅使用Retina图像并在标准分辨率显示设备上按比例缩小图像是一个坏主意。 非Retina设备的内存远远少于Retina设备,但是你强迫它们加载Retina分辨率图像。 换句话说:设备有一半的内存,但被迫加载的图像消耗的纹理内存是需要的四倍。 非Retina设备的GPU和CPU速度较慢。 但是你强迫他们使用像素数的四倍。 性能受损。 No, Retina images are not scaled down automatically. Only using R...

    cocos2d视网膜支持不再工作(cocos2d retina support not working anymore)

    你不需要hd spritesheet 里的精灵的后缀-hd 。 它看起来像你有: SD-spritesheet image1.png image2.png 等等 HD-spritesheet 此搜索,hd.png 图像2-hd.png 等等 你需要: SD-spritesheet image1.png image2.png 等等 HD-spritesheet image1.png image2.png 等等 You don't need the suffix of -hd for the spri...

    使用cocos2d-iphone javascript绑定检测视网膜显示(Detect retina display with cocos2d-iphone javascript bindings)

    你不应该使用@ 2x和cocos2d-iphone。 使用以下后缀使用自定义文件扩展名格式: iPhone SD:image.png iPhone Retina:image-hd.png iPad SD:image-ipad.png iPad Retina:image-ipadhd.png @ 2x仅适用于图像文件,cocos2d的自定义文件后缀适用于任何支持的资源,包括位图字体(.fnt)和tilemap(.tmx)文件。 You shouldn't use @2x with cocos2d-i...

    Cocos2d - 在视网膜设备上放大精灵动画(Cocos2d - scale up a sprite animation on retina device)

    如果使用Ipad视网膜,请执行以下操作: self.zapper.scale = 2.0; If using Ipad retina, do this: self.zapper.scale = 2.0;

    在Retina显示器上使用Zwoptex和Cocos2d的CCSpriteBatchNode(Using Zwoptex with Cocos2d's CCSpriteBatchNode on Retina Display)

    开始你有没有想过把这些行取消注释到appdelegate中: // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices if( ! [director enableRetinaDisplay:YES] ) CCLOG(@"Retina Display Not supported"); 它将使Cocos2d能够使用-hd文件。 然后你的精灵...

    Cocos2D图像存储(Cocos2D Image Storage)

    你可以使用Sprite::setTexture(const std::string &filename)来改变sprite的纹理。 因为一旦你使用它就会被TextureCache单例缓存。 如果要在使用纹理之前加载纹理以获得更高的性能,可以通过TextureCache::addImage(const std::string &filepath)加载纹理。 You can just use Sprite::setTexture(const std::string &filename) to chan...

    Cocos2D CCScene黑屏,什么都没发生?(Cocos2D CCScene black screen, nothing happening?)

    我一直在重复自己,但唉: 如果您需要在现有项目中更新cocos2d,最重要的一点是从Xcode项目和Finder中删除所有cocos2d文件。 然后移动新的cocos2d版本,并重新添加它。 否则,您可能最终仍在项目中使用旧的cocos2d文件,或者缺少新添加的文件。 如果屏幕保持黑色,则可能表示着色器出现问题。 新的cocos2d版本将所有着色器作为头文件(.h)中的字符串。 如果你没有添加它们,它们将无法正常工作。 不确定这是否会给你一个黑屏或彻底崩溃。 最后,由于Cocos2D 2.0使用O...

    什么样的图像应该进入cocos2d ios应用程序的spritesheet?(What kind of images should go into a spritesheet for a cocos2d ios app?)

    经验法则:一切都在spritesheet(纹理图集)中,除非有充分的理由不这样做。 绝对质地图集。 Cocos2d的缓存机制将导致所有单个图像被缓存并保留在内存中,因此最终它们将比使用纹理图集时更多。 如果他们很少需要我会使用单个图像(即菜单图标),我会在将它们添加到场景后将它们从CCTextureCache中删除,以确保它们在离开该菜单屏幕时将从内存中删除。 假设可能是错误的。 320x480图像使用512x512作为内存中的纹理。 如果你有多个,你可能最好将它们全部放在一个纹理图集中。 除非您...

    Cocos2D中的全屏GIF动画(Fullscreen GIF animation in Cocos2D)

    您想要显示的任何类型的图像必须首先放在内存中。 所以,如果有太多帧要加载到内存中,则无法播放动画。 如果你想播放这么大的动画,你可以尝试创建视频文件并在你的openGL视图上播放 any kind of images, that you want to display, must be placed in memory first of all. so, you cannot play animation, if you have too many frames to be loaded to m...

    Cocos2D:更新视网膜的位置(Cocos2D: Updating positions for retina)

    我遇到了同样的问题,这就是我找到的。 问题与点与像素以及Cocos2d如何处理它们有关,您在问题中提到了这一点。 如您所知,非视网膜显示屏上的一个点与视网膜显示屏相同。 iPhone 3GS是非视网膜,分辨率为320 x 480,屏幕的中心点为160 x 240.视网膜iPhone 4的分辨率为640 x 960,但中心“这个屏幕的点仍然是160 x 240。 我们假设您的tmx地图由32 x 32像素的图块组成。 让我们进一步假设您要检查“英雄”精灵当前所在的图块。 最后,让我们假设您的英雄精灵...

    相关文章

    更多

    Cocos-html5 初识

    Cocos html5 项目环境的搭建。按照官网的文档搭建。(cocos html5 v2.2.3、w ...

    JOGL 处理3D图形

    GLAutoDrawable&nbsp

    想开发3D引擎

    想制作3D引擎,希望高手给推荐一本好书。 需要什么IDE? 需要什么语言?JAVA/C++/C#. ...

    3d引擎列表

    免费引擎 Agar - 一个高级图形应用程序框架,用于2D和3D游戏。 Allegro lib ...

    java3d的前景

    奥运后一直在找工作,本来是做WEB方面的工作。 就像北京今天的天气一样,最近IT也是冷的要命。 工 ...

    mysql删除外键(Cannot drop index 'FK7D676EBBD0A6D8FD': needed in a foreign key constraint)

    如果使用SQLyogEnt删除外键,会提示Cannot drop index 'FK7D676 ...

    Phaser开源2d引擎 javascript/html5游戏框架

    原文来自:http://html6game.com/thread-1023-1-1.shtml 转自: ...

    About Unity3D 4.1.2 (to continue…)

    Here are something that need to take care of when y ...

    JFreeChart 创建三维/3D饼图/条形图

    org.jfree.chart.plot.PiePlot3D

    Python内建函数(D)

    dir([object]) 说明:不带参数时,返回当前范围内的变量、方法和定义的类型列表;带 ...

    最新问答

    更多

    将十六进制的字符串转换为字符串(Convert hex-encoded String to String)

    您希望将十六进制编码的数据用作AES密钥,但数据不是有效的UTF-8序列。 您可以将其解释为ISO Latin编码中的字符串,但AES(key: String, ...)初始化程序将该字符串转换回其UTF-8表示形式,也就是说,您将从开始时获得不同的关键数据。 所以你不应该把它转换成字符串。 使用 extension Data { init?(fromHexEncodedString string: String) } 方法从Swift中进行十六进制/二进制字符串转换,将十六进制编码的

    将friendly_id添加到用户模型后,登录后的友好转发不起作用(Friendly forwarding after login doesn't work after adding friendly_id to the user model)

    在应用程序控制器中,将redirect_back_or(path)方法更改为此方法。 def redirect_back_or(path) redirect_to session[:forwarding_url] || path session.delete(:forwarding_url) end 你有redirect_to request.referer之前负责将你重定向到最后一个url,即login_url。 我不知道为什么你要定义两个不同的方法

    Qt + VS2010:由于 .dll从您的计算机丢失,程序无法启动(Qt + VS2010: The program can't start because .dll is missing from your computer)

    您可能需要将有问题的DLL复制到您的可执行文件所在的文件夹中,或者确保DLL位于系统PATH中的文件夹中。 You likely need to copy the DLLs in question to the folder your executable is in, or ensure that the DLLs are located in a folder in the system's PATH.

    AutoFixture使用内部setter创建属性(AutoFixture create property with internal setter)

    理想情况下 ,测试不应该与类的internal成员交互,因为它们明确地从其公共API中排除 。 相反,这些成员将通过公共API启动的代码路径间接测试。 但是,如果在您的特定情况下这不可行,则可能的解决方法是从测试中明确地为内部属性赋值 。 您可以通过以下两种方式之一来实现: 通过使用InternalsVisibleTo属性将程序集中的所有内部成员公开给测试项目。 通过在特定接口中表示类的可修改状态并明确地实现它。 在您的示例中,选项1将是: // [assembly:InternalsVisib

    使用Trigger.IO/PhoneGap在UIWebView中使用focus()事件自动显示键盘(Show keyboard automatically with focus() event in UIWebView using Trigger.IO/PhoneGap)

    访问UIWebView不是我们在当前版本的插件中正确公开的东西(但我们很快就会支持)。 现在,如果您想尝试一下,可以添加 extern UIWebView *webView; 在插件文件的顶部,这将使您的API方法中的变量webView可用。 这将很快停止工作,所以我建议你现在只用它来测试一下。 2012年10月更新 : 该应用程序的Web视图现在通过ForgeApp : http : ForgeApp 例如: [ForgeApp sharedApp].webView Access to t

    ASP.NET MVC控件(ASP.NET MVC Control)

    您可以使用RadComboBox以及此处找到的此telerik社区项目提供的一些小调整。 应该在MVC中都能正常工作。 You can use the RadComboBox along with a little tweaking as provided for by this telerik community project, found here. Should all work fine in MVC.

    在后期保存上下文 - 将指针保存到上下文?(Saving Context At a Later Stage - Saving Pointer To Context ? Core Data)

    是的,您可以在循环后保存上下文。 它比每次迭代中的保存要好得多。 如果你看一下MagicalRecord src,你会看到MR_contextForCurrentThread总是为相同的线程返回相同的上下文,如果没有上下文的线程,MagicalRecord会创建它。 此外,您不需要传递上下文[_entityClass createInContext:context] ,只需要[_entityClass MR_createEntity] - 它将在当前线程的上下文中创建 Yes, you can

    tinyMce函数用于确定弹出窗口是否已打开(tinyMce function to determine if popup is already open)

    这是我要去的解决方案: 我似乎已经确认: - windowManager.open()不会像window.open()那样返回对窗口的引用 - windowManager没有内置方法来限制可以打开的实例数。 但它确实有一种方法可以将onClose函数添加到插件窗口:ed.windowManager.onClose.add(function(){alert('Closing!');}); 所以我将在onClick代码中使用一个变量来跟踪弹出窗口是否已被打开和关闭。 onClose函数将该变量标记为

    使用nil调用Document.find在mongodb中无效(Calling Document.find with nil is invalid in mongodb)

    OrderController #new调用OrderController#current_cart,它运行Cart.find(session [:cart_id])。 在会话开始时没有:cart_id,即session [:cart_id]为nil,你得到上面的Mongoid :: Errors :: InvalidFind异常。 请注意,当您正在抢救ActiveRecord :: RecordNotFound时,您的救援子句不会挽救该异常。 您正在使用Mongoid,而不是ActiveRec

    在函数中返回postgresql查询结果(Return postgresql query result in a function)

    假设您正在使用nodejs和pg模块。 正如您所说,由于查询功能是异步的,您无法直接将结果返回给调用者。 传统上,在nodejs中,调用者传递一个回调函数来处理结果或错误(如果有的话)。 在Kotlin中,这看起来像: client.query(MY_QUERY_TEMPLATE, params) { err, result -> if (err != null) { // do something with the error }