cocos2d x教程问题,求救~

很高兴你来到我的博客,同时也要感谢你对cocos2d-x引擎的支持。不过,既然你在这个时候来到这里,那八成是因为你遇到了麻烦&&在你的cocos2d-x应用中,中文的显示似乎不太正常。
虽然cocos2d-x是一个跨平台的2D游戏引擎,但是目前我只使用VC在Win32平台下学习她。如果你是在其他平台上做开发,那么这篇文章对你可能没有太大帮助,我建议你阅读cocos2d-x的代码,找出问题的关键,从而定制一个可行的解决方案。
作为一名初学者,你必定像我一样跟着教程将代码敲进编辑器里,保存,编译,运行。却惊奇地发现中文字符串要么不显示了,要么显示成了乱码。心里想着,天啊,什么地方出问题了。然后打开百度、谷歌,搜索&cocos2d-x 中文&。于是你找到了解决方案,要把文件保存为&无签名的UTF-8&编码。按照上面的方法操作,编译,运行,这时你已经可以看到中文字符显示正常了。如果你还有别的什么重要的事情要做,没有时间听我在这里废话,那么你现在就可以点击窗口上的叉叉离开了。
。。。。。。咳咳。。。
你还在这里?你还想听听为什么会这样吗?额。。。好吧,那我就简单说一下。以创建一个label为例,当我们使用CCLabelTTF * CCLabelTTF::labelWithString(const char *label, const char *fontName, float fontSize)来创建label的时候,实际上这里的const char *参数期望的是UTF-8编码的字符串(你可以查看CCImage_win32.cpp中BitmapDC的drawText函数来印证我的说法),如果传入一个非UTF-8编码的字符串,那么创建的label就会显示得不太正常。注意,这里所说的传入参数的编码是指程序运行时传入的字符串的编码,而不是源文件保存的编码。这实际上是一个编译器相关的问题,具体情况你可以通过这篇文章了解一下。简单来说,如果你使用10版的VC做开发,希望将UTF-8编码的字符串硬编码到源代码中,并且不使用转义字符"\xE6\xB1\x89"这种缺乏可读性的方案,那么你必须将文件保存为&无签名的UTF-8&编码。
然而在VC上使用&无签名的UTF-8&编码保存代码文件是有毒副作用的。有兴趣的朋友可以跟我一起做个实验。新建一个&Win32 控制台应用程序&,然后添加如下代码:
1 #include "stdafx.h"2 3 int _tmain(int argc, _TCHAR* argv[])4 {5
const char str[] = "退出";6
return 0;7 }
然后将文件保存为&无签名的UTF-8&编码,编译。
我用的是Microsoft Visual C++ 2010 学习版,输出:
1&------ 已启动全部重新生成: 项目: utf-8-test, 配置: Debug Win32 ------1&
stdafx.cpp1&
utf-8-test.cpp1&d:\projects\utf-8-test\utf-8-test.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失1&d:\projects\utf-8-test\utf-8-test.cpp(8): error C2001: 常量中有换行符1&d:\projects\utf-8-test\utf-8-test.cpp(9): error C2143: 语法错误 : 缺少&;&(在&return&的前面)========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
有个叫wva的人遇到过类似问题,他向微软提交了此bug根据Visual C++ Compiler Team员工的解释:The compiler when faced with a source file that does not have a BOM the compiler reads ahead a certain distance into the file to see if it can detect any Unicode characters - it specifically looks for UTF-16 and UTF-16BE - if it doesn't find either then it assumes that it has MBCS. I suspect that in this case that in this case it falls back to MBCS and this is what is causing the problem.看见了吧,对于那些没有BOM的文件设计就是这样的。从语气上看,他们编译器小组也不打算修改设计。所以呢,在VC上使用&无签名的UTF-8&编码的文件,你就是在抱着一颗不定时炸弹玩耍。因为你永远都不敢确定哪些词能通过编译,哪些不能!
如果要硬编码字符串,即便是字符编码转换也不一定能帮不上你。一旦你为此增加了字符编码转换的代码,那么也意味着可移植性降低了。因为这从根本上是编译器决定的。所以如果你想要在你的cocos2d-x应用里使用中文,那么最好将它们存放到外部资源文件中去,然后提供一套文本资源获取接口。或者你仅仅是想像我一样快点儿开始cocos2d-x引擎的学习,那么暂时放弃中文吧,应该能省下不少时间。
阅读(...) 评论()Blue Path 简约iOS7风格智力游戏
Unravel Line 色彩解密游戏
Scribbles Ball 物理弹性游戏
cocos2d-x 快速熟悉Lua基本细节问题
cocos2d-x 快速熟悉Lua基本细节问题
围观10802次
编辑日期: 字体:
10,802 views
猴子原创,欢迎转载。转载请注明: 转载自,谢谢!
一、程序块的写法:
a= 1; b = a*2
a = 1 b = a*2
1234567891011
a = 1&b = a*2&a = 1;&b = a*2;&a= 1; b = a*2&a = 1 b = a*2
这四个程序块都是等价的。
二、Lua 变量区分大小,~= 是 不等于
三、注释符号
这里是多行注释符号
这里是多行注释符号
print(&Sunny&)
-- 两个连接符就是单行注释符号
--[[&这里是多行注释符号&这里是多行注释符号&]]&print("Sunny")
-- 两个连接符就是单行注释符号
注意:多行注释符号一般这样写:
print(&Sunny&)
--已经被注释了
--[[&print("Sunny")
--已经被注释了&--]]
优点:假如你想把注释去掉,直接在开头注释符号前面加一个连接符就可以了。(多行注释符号被改成了单行)
print(&Sunny&)
--没有注释
---[[&print("Sunny")
--没有注释&--]]
四、全局变量不用声明,赋值就可以了,不用的时候赋值nil,未赋值的全局变量为nil
五、boolean,只有false和nil是假,其他值都是真(包括0和空字符串)
六、number ,表示双精度浮点数,Lua没有整数类型
七、string,可以赋值为任意二进制数据
1、注意Lua的字符串是不可变的值,不能像c++那样修改字符串里的字符,需要修改的话请创建一个新的字符创。
a = &hello world& --也可以是单引号,注意统一风格就可以了
b = string.gsub(a,&world&,&sunny&)
print(a) --输出 hello world
print(b) --输出 hello sunny
a = "hello world" --也可以是单引号,注意统一风格就可以了&b = string.gsub(a,"world","sunny")&print(a) --输出 hello world&print(b) --输出 hello sunny
2、在字符串上面进行算术操作,lua会将字符串转化成数字
print(&1& + 1) --输出 2
print(&a& + 1) --错误:a string value
print("1" + 1) --输出 2&print("a" + 1) --错误:a string value
3、tonumber(),字符串转数字
print(tonumber(&123&)) --输出数字 123
print(tonumber(&a123&)) --输出 nil
print(tonumber("123")) --输出数字 123&print(tonumber("a123")) --输出 nil
3、tostring(),数字转字符串(也可以使用连接符,123 .. “” )
print(type(tostring(123))) --输出 string
print(type(123 .. &&)) --输出 string
print(type(tostring(123))) --输出 string&print(type(123 .. "")) --输出 string
4、#,长度操作符,获取字符串长度
a = &sunny&
print(#a) --输出 5
a = "sunny"&print(#a) --输出 5
八、table,一种关联数组,也就是一种有索引方式的数组,索引值可以是整数、字符串或其他类型。(nil不可以作为table索引值)
a = {} --创建table,将table的引用存到a
a[&x&] = 1
--增加一个新条目 &x&:1
--增加一个新条目 &y&:2
--c和a引用了同一个table
print(a[&x&]) --输出 1
print(a[&y&]) --输出 2
print(c[&x&]) --输出 1
print(c[&y&]) --输出 2
print(c.y)
12345678910111213141516171819
a = {} --创建table,将table的引用存到a&a["x"] = 1
--增加一个新条目 "x":1&b = "y"&a[b] = 2
--增加一个新条目 "y":2&c = a
--c和a引用了同一个table&print(a["x"]) --输出 1&print(a["y"]) --输出 2&print(c["x"]) --输出 1&print(c["y"]) --输出 2&print(c.y)
注意:c.y 等价与 c[“y”],但是不同于c[y]
常用技巧:
for i = 0,9 do
for i = 1,#a do --#a 返回a的最后索引值
print(a[i]) --利用#输出所有行
print(a[#a]) --输出最后一个值
a[#a] = nil --删除最后一个值
a[#a+1] = 10 --添加一个值到最后
12345678910111213141516171819
a = {}&for i = 0,9 do&a[i] = i&end&for i = 1,#a do --#a 返回a的最后索引值&print(a[i]) --利用#输出所有行&end&print(a[#a]) --输出最后一个值&a[#a] = nil --删除最后一个值&a[#a+1] = 10 --添加一个值到最后
注意:不推荐使用索引0为起始索引,大多数内建函数都假设数组索引开始于1,所以为0的索引数组可能会出现错误。
本文固定链接:
转载请注明:
作者:Houzi
Write the code. Change the world.
如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!
您可能还会对这些文章感兴趣!Cocos2d新手求助_百度知道
Cocos2d新手求助
CCDirectorTypeDefault];这个语句实现什么功能:1、[[CCDirector sharedDirector] setPixelFormat刚刚接触cocos2d,下面是我看的一个例子中不明白的代码;
这个语句完成了什么功能?3?2:CCDirectorTypeDisplayLink] )
[CCDirector setDirectorType,请各位指教,是场景吗:kPixelFormatRGBA8888]、CGSize是什么意思、if( ! [CCDirector setDirectorType、CGSize size=[[CCDirector sharedDirector] winSize];这个if语句判断的什么、之后又完成了什么功能,好多基本的代码都看不懂
还有CCDirector是一个什么类
提问者采纳
如果不支持就设置为CCDirectorTypeDefault类型。3.是设定主窗口显示图像的调位盘位宽,在特定的条件下显示执行摸个场景.1新特性,就是设备的宽高。CCDirector:利用iPhoneOS 3,负责创建管理应用程序&#47。默认的就是NSTimer的执行效率,保持与UIKit的兼容性,我控制你们怎么去执行。CCDirectorTypeDisplayLink,提供高于NSTimer的执行效率1,和场景CCScene没有关系:导演类,如果你做spritesheet你就知道kPixelFormatRGBA8888代表什么意思。这就是导演的功能。用导演这个词多形象啊。2.判断你的设备是否支持CCDirectorTypeDisplayLink模式!希望能帮助到你;游戏的主窗口。这是默认的图片设备.得到的CGSize是住屏幕的宽高
提问者评价
嗯,我晓得了,第二个主要是那个win让我误解了不知道从何下手~谢谢。。
其他类似问题
为您推荐:
cocos2d的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求助关于cocos2d安装的问题_百度知道
求助关于cocos2d安装的问题
99.5文件 普通的用打开文件的方法进入;Shared/install-templates,解压2.99.&#47,进入解压目录(ls 和cd 文件 命令)3,建了一个工程,project里面可选的模版只有0;Developer&#47,打开看到的东西不一样呢3,为什么我的xcode里面没有安装好的0.13个.0问题有两个1,提示sdk选择错误,写的是BASE_TEMPLATE_DIR=&quot,Developer&#47,为什么两次进入,里面有一个cocos2d 0我的步骤是.5的版本的cocos2d呢一个上午了;Xcode&Library/$HOME&#47,然后输入root密码.99:什么都没有2;Application Support&#47.99;Application Support/Library&#47.sh这个文件里面有这个信息.5-beta3.5的5;我进入xode里面的templates去看 用终端命令进入.sh -f 输入命令 ;Xcode&quot,没有0.99;BASE_TEMPLATE_USER_DIR=&Shared&#47,打开xcode。zip包;&#47,打开看:1,提示安装成功这个时候问题出现了4,怎么删除旧版本的cocos2d网上说install-templates,说要用sdk3,去google code下载最新的api,cocos2d-iphone-0,打开终端
我有更好的答案
Developer/Project Templates&#47, you can delete any of the templates you don'Application/If you navigate to this dir);iPhoneOS, you can see where the templates are copied.sh'Library/Xcode/Developer&#47我发现老外也是这样说的If you read the script that installs the template ('install_Platforms&#47:/t want anymore.platform&#47
呵呵,回头看看没有那么难,可中间每一步都不太会xcode不熟,shell命令也要查,加油,笨鸟多飞飞就好了
我了个去,总结快写完了,刷新了一下,什么都没了,重写
额,写的问题有两个,却不小心写了3个问题
其他类似问题
为您推荐:
cocos2d的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 cocos2d x 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信