FAQ:
cocos2d de I-Phone: Box2D: compile erros depois de acrescentar #import "box2d.h" Box2D: compile errors after adding #import "box2d.h"Procure o meu cocos2d documentos de perguntas feitas por usuários de I-Phone & Seminários
Por favor observe que a pesquisa de blog na esquina certa superior não procura os meus documentos de perguntas feitas por usuários e Seminários.- Observe: por favor não compartilhe conexões de carregamento diretas a arquivos PDF, as conexões de carregamento vencem depois de uns minutos de par!
Box2D é escrito em C ++. Todos os arquivos que usam Box2d via #import terão de ser compilados como Objetivo C ++ código. De outra maneira você adquirirá erros, tais como: Otherwise you will get errors such as:
- esperado '=', ',', ';', 'asm' ou '__ atribuem __' antes 'b2_version'
- 'o std' não declarado (primeiro usam nesta função)
- esperado',' ou';' antes ':' símbolo token
- specifier-qualifier-list esperado antes 'b2Vec2'
- esperado')' antes '*' símbolo
- esperado';' antes de 'vazio'
- identificador esperado ou' (' antes ':' símbolo
- datilografe defaults 'ao número interno' na declaração de 'b2Vec2'
- Cassert: Nenhum tal arquivo ou diretório
- cmath: Nenhum tal arquivo ou diretório
- cfloat: Nenhum tal arquivo ou diretório
- cstddef: Nenhum tal arquivo ou diretório
- e muitos outros "nenhum tal arquivo ou diretório"
Se algum destes parecer familiar, leia em!
A solução #1:
modifique o Tipo de Arquivo de todos os arquivos.m aquele uso Box2dVia direito ou controle clicam no arquivo original (.) você pode modificar o tipo de arquivo. Modifique-o para sourcecode.cpp.objcpp como mostrado em cima.
A solução #2:
renomeie o arquivo a.mmA solução alternativa simplesmente é renomear os arquivos.m que usam Box2d a arquivos.mm. É isso.










Esclarecimento de correio. Agradecimentos!
E, naturalmente, tenho alguns pergunta
- tudo é relativo, mas para o código comum é melhor para usar NSString, NSArray (e pagar o preço de criar novos objetos) ou os mutáveis? Que podem ser os parâmetros para selecionar entre cada um?
- Estou admirando-me se o novo I-Phone 4.0′s maior realização será uma questão. Os jogos que dirigem lisamente no I-Phone 1os e 2os dispositivos de geração correrão provavelmente demasiado rápido?
Oi Max,
duvido que os NSMutable* datasets sejam assassinos de realização. Não fiz nenhum teste mas estou bastante seguro que se você não os modificar em absoluto eles executarão provavelmente tão bom como os não-mutáveis. Agora, uma vez você *do* tem de modificar as tabelas ou cadeias está bem tê-los mutável para que o material seja cuidado para você nos bastidores. De outro lado, se você sabe que você só estará criando os itens uma vez mas nunca re-encomendar, retirar ou acrescentar que os outros então usam os não-mutáveis. Para mim é uma matéria de caso de uso em vez de realização. Now, once you *do* need to change the arrays or strings it’s good to have them mutable so that stuff is taken care for you behind the scenes. On the other hand, if you know that you’ll only be creating the items once but never re-order, remove or add others then use the non-mutable ones. For me it’s a matter of use case rather than performance.
Os jogos não correrão mais rápido em mais novos dispositivos. o cocos2d's CCDirector assegura-se disto. Você melhora framerates naturalmente mas não mais rápido gameplay. Isto mantém-se ser verdade para todos os motores de jogo modernos. You do get better framerates of course but not faster gameplay. That holds true for all modern game engines.
Oi gaminghorror. Obrigado por toda a grande informação no seu blog
que Realmente encontra isto útil.
Eu quis perguntar sobre o seu código de contexto de paralaxe em cima – estou usando isto em um projeto de experiência, mas não posso parecer conseguir que as telhas se ajustem perfeitamente ao lado de eachother. Em outras palavras, o meu duende que estou cobrindo com telhas (que é 480, 320 no tamanho) está cobrindo com telhas, mas quando o novo duende começa, há uma fenda preta aproximadamente 25 pixéis largos entre o novo e o velho. Lá algum caminho é a elliminate esta fenda? Tentei procurar os fóruns cocos2d etc., e encontrei a informação na 2a projeção que apaga etc. … mas nada disso ajudou-me por enquanto … a tentar e ilustrar o que estou adquirindo, isto é o que adquiro o enrolamento através da tela de dispositivo (x’s são o duende o espaço branco é a fenda preta que adquiro): Is there any way to elliminate this gap? I have tried searching the cocos2d forums etc, and found info on 2D projection turning off etc… but none of that has helped me so far… To try and illustrate what I am getting, this is what I get scrolling across the device screen (x’s are the sprite white space is the black gap I get):
xxxxxxxxxxxxxxx | |xxxxxxxxxxxxxxxx | |xxxxxxxxxxxxxxxxxx | |xxxxxxx
Isto parece ser uma compensação de colocação, você está seguro que os duendes são exatamente 480 pixéis à parte cada um? Ambos também têm de ter o mesmo anchorPoint. E se você modifica a escala dos duendes, a compensação também tem de ser ajustada apropriadamente. And if you change the scale of the sprites, the offset also needs to be adjusted appropriately.
Você poderia querer testar a colocação com mais pequenos duendes para que pelo menos dois deles se ajustem inteiramente na tela.
Oi GamingHorror, muito obrigado pela resposta
Tão esta manhã eu despertei-me e tinha uma mente limpa – pensou nele para o tempo - O meu duende do contexto é exatamente 480×320 – isto é screensize. A fenda eu via a espécie de 20-30 pixéis olhados em torno entre cada duende repetido. Portanto pensei, eh, em 480, somente dão-me uma textura que é 512 no direito de tamanho? Assim talvez a sua realização de um cheio 512pixel textura. Portanto voltei para fotofazer compras, e aumentei a minha largura de duende a 512 (como eu wouldnt perdem qualquer realização de qualquer maneira) e deu a isto uma tentativa, usando o seu código: So I thought, hey, at 480, I am just being given a texture that is 512 in size right? So maybe its doing a full 512pixel texture. So I went back to photoshop, and increased my sprite width to 512 (as I wouldnt lose any performance anyway) and gave this a try, using your code:
CCSprite *background = [CCSprite spriteWithFile:@ "tile1.png"
rect:CGRectMake (0,0, 480*50, 320)];
[mesmo addChild:background];
[contexto setPosition:ccp (winSize.width/2, winSize.height/2)];
ccTexParams params = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT};
[background.texture setTexParameters: ¶ms];
e isto classificou-o! Não mais fendas. Muito obrigado pelos ponteiros também – eu não tinha pensado em anchorPoints! Obrigado mais uma vez pelo grande blog. Sou assinado! Thanks so much for the pointers too – I hadn’t thought about anchorPoints! Thanks again for the great blog. I am subscribed!
Ai sim, se você estiver usando GL_REPEAT então o tamanho de imagem deve ser um poder de dois. Eg 64×64 ou 512×128
Impressionante – que limpa coisas para mim e faz o sentido perfeito agora. Obrigado por confirmação. O meu enrolamento de paralaxe em camadas está parecendo doce agora! My layered parallax scrolling is looking sweet now!
Assim outra pergunta rápida … adivinho que não será possível usar um spritesheet com GL_REPEAT? Especialmente o caminho você tem de criar um CGRect …
Atualmente faço outra gráfica de spritesheets como isto:
CCSprite *projectile = [CCSprite spriteWithSpriteFrameName:@ "missile.png"];
Que são carregados do meu.plist / spritesheet. Não possível de destinar o contexto GL_REPEAT como isto?
Desde que GL_REPEAT é um parâmetro de textura, aplica à textura inteira, portanto você precisará de usar uma textura de imagem única, e o tamanho deve ser um poder de 2, eg 128×16 ou 256×256.
Isto também exclui o uso de spritesheet.
Usando esta técnica ele trabalha bem no simulador, mas no dispositivo a textura é super-blocky e pixellated. Estou dirigindo este teste em cocos2d 0.99.5.
Ive tentou tanto com 256×256 como com 512×512 texturas, e o resultado é o mesmo. O simulador repete-se perfeitamente, esticamentos de dispositivo e pixellates a textura horrivelmente.
Você tem alguma idéia porque isto acontece?
Hmmm, não realmente. Estou adivinhando que poderia estar relacionado à exposição de Retina, você testa em um dispositivo de retina?