本bo不记录主要的逻辑(毕竟我技术这么shi),谈谈一些小的交互细节,技术含量都不高(毕竟新人,大拿请移驾么么哒)
1.关于icon:(必须是png,有阿法通道(Alpha Channel),这个初学者多多少少会被坑)
作为一个美术技术相结合(误)的猿类,换icon这种事还是很乐意去做的~
Android和ios不同,在adt环境下,相应的res文件夹下,找到不同px的图片,替换之
iOS下,在工程的Assets.xcassets内找到icon选项,选择相应px的png图片,替换之(ps.一定要注意px!)
2.关于获取Texture(通过SpriteBatchNode获取),可以用CCSprite* createWithTexture(batch_map)->ccRectMake(x,y,w,h)来get资源cache,从而渲染,获取具体资源的position可以从对应的plist里查找!!
3.关于Ecilpse ADT 中的Android工程环境的配置(初学者的我觉得异常恶心),需要配置工程路径有NDK_MOUNDLE_PATH,NDK-Build路径,(需要在计算机的环境配置中添加相应路径)
4.一些小bug的处理,当Android中的临时文件(.o结尾)若比引用文件或更改后的原文件要新,这时候会出现编译不符的现象,解决方案就是删掉这些临时文件(如更改cocos的scrollView文件,run后然并卵,这是后把pro.Android/bin/obj中对应的文件删掉就行了)
5.String 转成const char*类型----->在调用的地方尾部加上.c_str(); /注:在此贴上一个大大的博文
<span style="background-color: rgb(255, 204, 204);">语法: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。 注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char* c; string s="1234"; c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时,编译器也将报错——将一个const char *赋与一个char *。 应该这样用: char c[20]; string s="1234"; strcpy(c,s.c_str()); 这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作</span><span style="background-color: rgb(255, 252, 246);"> </span>
贴一个有用的但是以前没见过的CCApplication:
关于ecilpse中某个文件夹没有导入的问题,可以在相应的文件夹下右击选择properties->resources->EDIT->选择相应的路径就行
6.关于C++调用JAVA:
在相应的cpp里加上jni.h 和platform/android/jni/JniHelper.h 这两个头文件
调用方法(贴代码)
JniMethodInfo minfo;//创建对象
if (JniHelper::getStaticMethodInfo(minfo, "com/dros/trac/fant/longzhuBall",
"ExitGame","()I"))
/*参数一:JniMethodInfo的引用
参数二:调用的类的路径
参数三:方法名
参数四:函数类型简写
7. 关于Android机子返回键绑定事件。
public boolean onKeyDown(int keyCode, KeyEvent event)
KeyEvent.KEYCODE_MENU 安卓home键, KeyEvent.KEYCODE_BACK back按键
8.利用Android的crash log 来定位error:
关于日志输出tips:(摘录网上大大的)
log start:*** *** *** *** *** *** ***
第二行显示Android版本
第三行显示当前的线程id(pid)和进程(tid),若崩溃的是主线程的话,pid和tid是一样的
第四行是unix信号,标识段错误
定位步骤如下:
9.关于API level 的,贴个关系对应图:
Android版本名和API Level关系全称 | Android的版本 | Android版本名称Code name | Android的API level |
Android 1.0 (API level 1) | 1.0 | (no code name) | API level 1 |
Android 1.1 (API level 2) | 1.1 | (no code name) | API level 2 |
Android 1.5 Cupcake (API level 3) | 1.5 | Cupcake | API level 3, NDK 1 |
Android 1.6 Donut (API level 4) | 1.6 | Donut | API level 4, NDK 2 |
Android 2.0 Eclair (API level 5) | 2.0 | Eclair | API level 5 |
Android 2.0.1 Eclair (API level 6) | 2.0.1 | Eclair | API level 6 |
Android 2.1 Eclair (API level 7) | 2.1 | Eclair | API level 7, NDK 3 |
Android 2.2–2.2.3 Froyo (API level 8) | 2.2.x | Froyo | API level 8, NDK 4 |
Android 2.3–2.3.2 Gingerbread (API level 9) | 2.3 – 2.3.2 | Gingerbread | API level 9, NDK 5 |
Android 2.3.3–2.3.7 Gingerbread (API level 10) | 2.3.3 – 2.3.7 | Gingerbread | API level 10 |
Android 3.0 Honeycomb (API level 11) | 3.0 | Honeycomb | API level 11 |
Android 3.1 Honeycomb (API level 12) | 3.1 | Honeycomb | API level 12, NDK 6 |
Android 3.2 Honeycomb (API level 13) | 3.2.x | Honeycomb | API level 13 |
Android 4.0–4.0.2 Ice Cream Sandwich (API level 14) | 4.0.1 – 4.0.2 | Ice Cream Sandwich | API level 14, NDK 7 |
Android 4.0.3–4.0.4 Ice Cream Sandwich (API level 15) | 4.0.3 – 4.0.4 | Ice Cream Sandwich | API level 15, NDK 8 |
Android 4.1 Jelly Bean (API level 16) | 4.1.x | Jelly Bean | API level 16 |
Android 4.2 Jelly Bean (API level 17) | 4.2.x | Jelly Bean | API level 17 |
Android 4.3 Jelly Bean (API level 18) | 4.3.x | Jelly Bean | API level 18 |
Android 4.4 KitKat (API level 19) | 4.4 | KitKat | API level 19 |
如果遇到类似跑debug时,手机设备不显示,则需要改动Android Manifest.xml的minSdkVersion,改成对应的版本即可
10. 关于Ecilpse的工程中添加CDT builder,android tools->Add Native Support,哦了
11.关于触摸吞噬的另一种很好的实现,利用bool值来判断某个dialog是否处于开启或调用状态,if(true) return;
12.关于resolved error,工程properties->code analysis->use project setting,哦了(不要轻信什么乱七八糟的,这才是王道)
13.获取列表内的某个具体item_tag,可以用动态转换成CCMenuItemSprite,贴代码:
CCMenuItemSprite *pItem = dynamic_cast<CCMenuItemSprite *>(sender);
int index = (int)pItem->getUserData();
14.【JAVA】关于java中访问具体URL并返回某些数据:
public CResultRet testConnection(int prduct_no,String linkid) throws ClientProtocolException, IOException, JSONException
{
TelephonyManager mTelephonyMgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = mTelephonyMgr.getSubscriberId();
Log.d("imsi:" ,imsi);//获取ismi码(无关紧要)
HttpClient client = new DefaultHttpClient();//创建HttpClient实例
String url = String.format("http://blog.csdn.net/sinat_31868507/article/details/50623831");
HttpGet getHttp = new HttpGet(url); //创建访问请求
Log.d("url!", url);
HttpResponse response = client.execute(getHttp); //开始执行
Log.d("calling here:!!!!!fffffff !", linkid);
CResultRet resultSet = new CResultRet();
}
15.【JAVA】关于字符串加密的demo:
public static String getMid(String mobile){//phonenum
//数字0-9按从小到大顺序变成RIZBHGECFO,替换完成后在第5个字符后面加10086
String mid = new String(mobile);
mid = mid.replaceAll("0", "R");
mid = mid.replaceAll("1", "I");
mid = mid.replaceAll("2", "Z");
mid = mid.replaceAll("3", "B");
mid = mid.replaceAll("4", "H");
mid = mid.replaceAll("5", "G");
mid = mid.replaceAll("6", "E");
mid = mid.replaceAll("7", "C");
mid = mid.replaceAll("8", "F");
mid = mid.replaceAll("9", "O");
StringBuffer strBuf = new StringBuffer();//StringBuffer是字符串变量
strBuf.append(mid.substring(0,5)).append("10086").append(mid.substring(5));
return strBuf.toString();
}
16.添加第三方类库:
把jar文件丢到libs下,在ecilpse中build_path ->add external archives
17.宏CC_BREAK_IF的作用就是代替if(zxx) break;可以用try{}catch(){}finally{}这种结构,但是这样做会极大的增加编译后文件的大小,使用do{} while(0) 加上CC_BREAK_IF就能实现一样的效果,而且不增加文件的大小。
18.【JAVA】获取用户手机的imsi和imei码:
需要添加读取手机状态的权限,<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
TelephonyManager mTelephonyMgr = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);
String imsi = mTelephonyMgr.getSubscriberId();
String imei = mTelephonyMsr.getDeviceId();