我可以用printf作为十六进制或八进制数打印.是否有格式标记打印为二进制或任意基数?
我正在运行gcc.
printf("%d %x %o\n", 10, 10, 10); //prints "10 A 12\n"
print("%b\n", 10); // prints "%b\n"
Run Code Online (Sandbox Code Playgroud) 我正在使用Java平台为Android平台调整交互式游戏.偶尔会有绘图和交互进行垃圾收集的打嗝.通常它不到十分之一秒,但有时在非常慢的设备上可能会达到200毫秒.
我正在使用ddms profiler(Android SDK的一部分)来搜索我的内存分配来自哪里,并从我的内部绘图和逻辑循环中删除它们.
最糟糕的罪犯是短循环,如,
for(GameObject gob : interactiveObjects)
gob.onDraw(canvas);
Run Code Online (Sandbox Code Playgroud)
每次循环执行的地方都有iterator
分配.我现在正在ArrayList
为我的对象使用arrays().如果我想在内部循环中使用树或哈希,我知道我需要小心甚至重新实现它们而不是使用Java Collections框架,因为我无法负担额外的垃圾收集.当我在查看优先级队列时,可能会出现这种情况.
我也很难在哪里显示分数和进度Canvas.drawText
.这是不好的,
canvas.drawText("Your score is: " + Score.points, x, y, paint);
Run Code Online (Sandbox Code Playgroud)
因为Strings
,char
数组StringBuffers
将被分配到所有地方以使其工作.如果你有几个文本显示项目,并运行框架每秒60次开始加起来,将增加你的垃圾收集打嗝.我认为这里最好的选择是保持char[]
数组并解码int
或double
手动解码并将字符串连接到开头和结尾.我想听听是否有更清洁的东西.
我知道必须有其他人来处理这件事.您如何处理它以及您发现在Java或Android上以交互方式运行的陷阱和最佳实践?这些gc问题足以让我错过手动内存管理,但不是很多.
Java中的默认浮点类型是double.如果您将常量硬编码2.5
到程序中,Java会自动将其设置为double.当您对可能从更高精度中获益的浮点数或整数执行操作时,类型将"提升"为double.
但是在Android API中,一切似乎都是从声音音量到矩形坐标的浮动.RectF
在大多数绘图中都有一种叫做结构的结构; F代表浮动.对于那些(float)
经常提升双打的程序员而言,这真的是一种痛苦.难道我们都不同意Java代码是如此混乱和冗长吗?
通常数学协处理器和加速器在Java中更喜欢双重,因为它对应于一种内部类型.有没有关于Android的Dalvik VM出于某些原因更喜欢花车?或者所有的浮动都是API设计中的变态的结果?
我可以使用,例如,MacPorts的GCC 4.6来获得C++ lambda表达式和锵仍然缺乏等现代化功能?我已经阅读了关于OS/X的编译和32/64位二进制文件的限制,但没有关于iOS限制.
这会导致编译到iOS的麻烦吗?
我需要根据我的Activity中的小部件和视图的初始布局来准备一些对象.我想在初始化步骤中执行它,理想情况是onCreate和onStart.考虑到当我们不在前台时发生变化的可能性,其中一些可能需要在onResume中发生.
所以我检查了我是否可以衡量我的观点是如何布局的.
Log.d("MyApp", "w,h of X is " + findViewById(R.id.X).getWidth() +
"," + findViewById(R.id.X).getHeight());
Run Code Online (Sandbox Code Playgroud)
我在onCreate,onStart和onResume上运行了这个.每次我得到0,0的宽度,高度.如果我等待onTouchEvent我得到布局信息,那么布局就完成了.
当我看到onResume时,我很惊讶布局没有设置和最终.我预计那些小部件已经布局好了,随时准备摆弄.
计算机屏幕上像素的发光度通常与像素的数字RGB三元组值线性相关.早期CRT的非线性响应需要补偿非线性编码,我们今天继续使用这种编码.
通常我们在计算机屏幕上生成图像并在那里使用它们,所以一切正常.但是当我们使用抗锯齿时,非线性 - 称为伽玛 - 意味着我们不能仅将0.5的alpha值添加到50%的覆盖像素并期望它看起来正确.α值为0.5仅为0.5 ^ 2.2 = 22%,亮度为α为1.0,典型伽马值为2.2.
是否有广泛建立的抗锯齿伽马补偿最佳实践?你有日常使用的宠物方法吗?有没有人看过任何关于结果的研究和人们对不同技术的图形输出质量的看法?
我已经考虑过做标准的X ^(1/2.2)补偿,但这在计算上非常强烈.不过,也许我可以使用256条目查找表来加快速度.
有没有人知道Android使用的Skia绘图库的良好文档?
主Canvas对象几乎没有任何状态,所以我特别想到你可以嵌入到Paint对象中的对象.我已经通过试验和错误解决了如何使用一些ColorFilters并使用ColorMatrixColorFilter制作了很酷的效果.现在我也想从LinearGradient着色器中获得我想要的阴影.我想我理解PathEffects并对XferModes有一些想法.MaskFilters和Rasterizer对我来说仍然是完全不透明的.但是,试错并不是理解复杂库的好方法.
大多数情况下,我担心Android文档不讨论2D图形和使用它们的方法.即使是类javadoc也经常无法解释该类正在做什么.实际的功能都在Skia C代码中,我可以得到它,但它也没有文档.我已经看过一些很酷的演示,但谷歌几乎没有解释它们是如何完成的.
是理解这些东西实验和阅读C代码的唯一方法吗?效率和最佳实践如何?Davlik/Android VM对内存分配敏感,有时速度慢,我担心我不是最好的方式.
我有一个很长的图形系列 - icon1_0.png,icon1_1.png,icon1_2.png ...,icon12_0.png,icon12_1.png,icon12_2.png - 我想用我的android应用程序打包它们.理想情况下,我认为我应该能够将它们作为资源加载,但资源ID被设置为java标识符.当然,java标识符不能在运行时组装.我必须要求R.drawable.icon12_00所以我不能设置一个循环
for(int icon=0;icon<12;icon++)
for(int frame=0;frame<3;frame++)
//syntax error obviously
BitmapFactory.decodeResource(getResources(), R.drawable."icon" + icon + "_" + frame + ".png");
Run Code Online (Sandbox Code Playgroud)
那么有没有办法通过他们的名字获取资源?更好的是,资源系统之外是否存在将数据文件打包到android应用程序包中的规范方法,以便我可以使用它们?
我正在考虑反思,但这对我来说似乎不是正确的解决方案.
我对 GIMP 脚本中的字符串到数字和数字到字符串的转换感到沮丧。我在 Windows Vista 中运行 GIMP 2.6.8。
我知道 GIMP 的内部 Scheme 实现会随着版本而变化,我似乎无法确定文档。据我所知,GIMP 的 Scheme 是 TinyScheme 的一个子集和/或支持 R5RS 标准程序。无论如何,当我想尝试新的东西时,我通常只是在打包的脚本目录中查看示例,因为这肯定会起作用,对吧?
例如,grid-system.scm 带有最新的 GIMP 版本并具有表达式,
(string-append (number->string obj) " ")
Run Code Online (Sandbox Code Playgroud)
这正是我想要的。但是,如果我在自己的脚本中使用 number->string,或者甚至在 GIMP 的脚本控制台中输入它(这是我通常测试我想做的新东西的方式),它会告诉我 number->string 是一个未绑定的变量:
> (number->string 3)
Run Code Online (Sandbox Code Playgroud)
Error: eval: unbound variable: number->string
来自 R5RS 的其他标准程序可以正常工作:
> (string-append "frust" "rated")
"frustrated"
所以,
1) 除了像搜索 GIMP 的源代码这样激烈的东西之外,是否还有一些当前 GIMP Scheme 脚本的潜在文档?
2) 我可以使用 GIMP 控制台来列出所有已定义的过程以找到我需要的东西吗?
3) 有没有其他人确认 number->string 没有为当前的 Windows 版本定义,即使它出现在打包的脚本中?我的网络搜索没有发现任何相关问题,并且完全卸载所有 GIMP 版本,回到最新版本让我陷入同样的困境。