我对这款iPhone SDK及其文档感到有点不舒服......
我打电话给AudioConverterNew
在返回下的文档中:它说"返回状态代码"......真的......
到目前为止,通过玩这些参数我只能得到两个不同的错误,这两个错误都没有列在音频转换器参考的底部.
它们是'mrep'和'?tmf'(将OSStatus转换为char数组)但具体代码并不是真正重要的.
据我所知,随机错误代码是在随机文件中定义的,因此您不能只搜索一个文件,我找不到只是让您搜索错误代码以获取更多信息的帮助文档,并且我可以告诉你,在OS X中,你可以使用GetMacOSStatusErrorString()将错误转换为有用的东西,但没有iPhone等价?
任何帮助将不胜感激.
编辑:
好的,所以投射它们反过来(我检查'mrep',但不是那里的任何一种方式),fmt?在音频转换器api的列表中,如果有点模糊,但是很公平,仍然'perm'不存在(尽管它可能与模拟器不支持aac解码有关)和我的一般问题仍然存在.
someString[someRandomIdx] = 'g';
Run Code Online (Sandbox Code Playgroud)
这会给我一个错误,
我该如何实现上述目标?
编辑:
是的它是'string'类型
鉴于:
void AFunction()
{
foreach(AClass i in AClassCollection)
{
listOfLambdaFunctions.AddLast( () => { PrintLine(i.name); } );
}
}
void Main()
{
AFunction();
foreach( var i in listOfLambdaFunctions)
i();
}
Run Code Online (Sandbox Code Playgroud)
现在你会认为这样做会对等:
void Main()
{
foreach(AClass i in AClassCollection)
PrintLine(i.name);
}
Run Code Online (Sandbox Code Playgroud)
但它没有,它将做的是每次打印AClassCollection中最后一项的名称!所以基本上每个lambda函数都使用相同的项目.我怀疑"当lambda被创建时"或"当它使用其中使用的外部变量的快照时"可能会有一些延迟,或者基本上只是持有'对局部变量的引用'i'
所以我这样做了:
string astr = "a string";
AFunc fnc = () => { System.Diagnostics.Debug.WriteLine(astr); };
astr = "changed";
fnc();
Run Code Online (Sandbox Code Playgroud)
而惊喜,惊喜,它输出"改变了!"
我正在使用XNA 3.1(无论是什么c#)
到底是怎么回事?lambda函数以某种方式存储变量或其他东西的"引用"吗?反正这个问题呢?
class D: A
{
B obj;
C obj2;
}
Run Code Online (Sandbox Code Playgroud)
为了什么建设这里保证?
我知道D将在A,B和C之后构建,但我真正想知道的是A是否保证在B或C之前构造,或者甚至是否保证在C之前构造B.
我知道你可以有一个明确的初始化列表:
D(): A(), B(), C()
{}
Run Code Online (Sandbox Code Playgroud)
但初始化列表是否确定了初始化的顺序?
此外,是否有任何组件是否具有默认构造函数?
我有一个"软件渲染器",我从PC移植到iPhone.使用iphone上的像素缓冲区手动更新屏幕的最快方法是什么?例如在Windows中,我发现的最快的功能是SetDIBitsToDevice.
我对iphone或库不太了解,似乎有很多层和不同类型的UI元素,所以我可能需要大量的解释......
现在我只是不断更新opengl中的纹理并将其渲染到屏幕上,我非常怀疑这将是最好的方法.
更新:
我试过openGL屏幕大小的纹理方法:
我得到了17fps ......
我使用了512x512纹理(因为它需要是2的幂)
只是呼唤
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,512,512,GL_RGBA,GL_UNSIGNED_BYTE, baseWindowGUI->GetBuffer());
Run Code Online (Sandbox Code Playgroud)
似乎对所有减速都负有责任.
评论它,并留下我所有的软件渲染GUI代码,以及现在非更新纹理的渲染,导致60fps,30%的渲染器使用,并且没有来自cpu的显着尖峰.
请注意,GetBuffer()只是返回一个指向GUI系统软件后台缓冲区的指针,无论如何都没有重新调整缓冲区或调整缓冲区大小,它的大小和格式都适合于纹理,所以我很确定减速有与软件渲染器无关,这是个好消息,看起来如果我能找到一种方法在60点更新屏幕,软件渲染应该暂时起作用.
我尝试使用512,320而不是512,512进行更新纹理调用,这奇怪甚至更慢......以10fps运行,也表示渲染利用率仅为5%,并且在openGLES内调用Untwiddle32bpp时所有时间都被浪费了.
我可以将我的软件渲染更改为原生渲染为任何pixle格式,如果它会导致更直接的blit.
fyi,在2.2.1 ipod touch G2上测试(就像类固醇上的Iphone 3G一样)
更新2:
我刚刚写完了CoreAnimation/Graphics方法,它看起来不错,但是我有点担心它如何更新每一帧的屏幕,基本上抛弃旧的CGImage,创建一个全新的...在'someRandomFunction中查看它'下面:这是更新图像的最快方式吗?任何帮助将不胜感激.
//
// catestAppDelegate.m
// catest
//
// Created by User on 3/14/10.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//
#import "catestAppDelegate.h"
#import "catestViewController.h"
#import "QuartzCore/QuartzCore.h"
const void* GetBytePointer(void* info)
{
// this is currently only called once
return info; // info is a pointer to the buffer
}
void ReleaseBytePointer(void*info, const void* pointer)
{
// don't …Run Code Online (Sandbox Code Playgroud) const int bob = 0;
if(bob)
{
int fred = 6/bob;
}
Run Code Online (Sandbox Code Playgroud)
你将在完成除法的行上得到一个错误:"错误C2124:除以或除以零"
这是蹩脚的,因为'if'检查失败是不可避免的,因为除法将导致div为0.坦率地说,我认为编译器甚至没有理由评估'if'中的任何内容,除了确保支撑完整性.
无论如何,显然这个例子不是我的问题,我的问题来自于做复杂的模板尝试在编译时尽可能多地做,在某些情况下参数可能是0.
反正有没有解决这个错误?或禁用它?或者比这更好的解决方法:
目前我能想到的唯一工作(我之前遇到过与递归枚举访问相同的问题)是使用模板特化来执行'if'.
哦是的,我正在使用Visual Studio Professional 2005 SP1和vista/win7修复程序.
我经历了一次设置这个过程,但是现在我需要这样做,这样我们就可以使用一个帐户在两台Mac上进行开发.所有演练告诉我
通过钥匙串访问在新Mac上创建签名请求或某事,生成一些私钥和公钥BS,然后它说要去开发人员门户并"添加"新证书,除了我看起来不像你只能有一个!我已经尝试过只下载原始证书,但这不起作用,它没有出现在'我的证书下它并没有'绑定'到任何键...
之前我曾经历过这个过程,我所能做的只是删除原始证书并创建一个新证书,但这无疑会阻止原始Mac的工作......
谁知道它是怎么做的?
谁知道为什么苹果让我们通过这样的过程!?这就像在世界上最困难的事情!
试试看:
volatile float bob = -344.0f;
unsigned int fred = (unsigned int)bob;
printf("%d\n",fred);
Run Code Online (Sandbox Code Playgroud)
输出将为0.
很明显我期待它就好像我已经从一个带符号的int转换为一个未编译的int(它确实包装并在iphone上按预期运行)
我们假设它与浮点设置有关.
有任何想法吗?
为什么这些代码块产生不同的结果?
一些常用代码:
#define PART1PART2 works
#define STRINGAFY0(s) #s
#define STRINGAFY1(s) STRINGAFY0(s)
Run Code Online (Sandbox Code Playgroud)
情况1:
#define GLUE(a,b,c) a##b##c
STRINGAFY1(GLUE(PART1,PART2,*))
//yields
"PART1PART2*"
Run Code Online (Sandbox Code Playgroud)
案例2:
#define GLUE(a,b) a##b##*
STRINGAFY1(GLUE(PART1,PART2))
//yields
"works*"
Run Code Online (Sandbox Code Playgroud)
案例3:
#define GLUE(a,b) a##b
STRINGAFY1(GLUE(PART1,PART2*))
//yields
"PART1PART2*"
Run Code Online (Sandbox Code Playgroud)
我正在使用VS.net 2005 sp1中的MSVC++
编辑:目前我认为预处理器在扩展宏时的工作方式如下:步骤1: - 取出正文 - 删除##运算符周围的任何空格 - 解析字符串,如果找到的标识符与名称匹配一个参数: - 如果它在##运算符旁边,用参数的文字值(即传入的字符串)替换标识符 - 如果它不在##运算符旁边,则运行整个解释过程首先是参数的值,然后用该结果替换标识符.(忽略stringafy单个'#'case atm) - 删除所有##运算符
第2步: - 获取结果字符串并解析任何宏
现在,我认为所有3个案例都应该产生完全相同的结果字符串:
PART1PART2*
因此,在第2步之后,应该导致
作品*
但至少应该导致同样的事情.
好吧,显然xna游戏只能以30fps的速度运行,这是一种耻辱,因为我们在iPhone上的游戏看起来好多了60 ...
无论如何,因为获得有关触摸屏状态的信息的唯一方法是获得其当前状态,实际上这意味着您只能以30 fps采样触摸屏.
即使我们的游戏必须以30fps运行,有没有办法从触摸屏获得更高分辨率的采样?也许通过回调?或者通过访问带有时间戳的触摸事件列表?
c++ ×3
iphone ×3
c# ×2
c ×1
casting ×1
certificate ×1
cocoa ×1
cocoa-touch ×1
ios ×1
lambda ×1
macos ×1
rendering ×1
standards ×1
touchscreen ×1
visual-c++ ×1
xna ×1