[color=#939ead,[list,$ s# U% R; |8 y1 Z/ s! K
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案: F+ O( M# j6 i6 h) h; W. v3 x
[*,
+ Q0 S. J, F/ ]/ R: J[*,多点触控:
1 c, }9 `. V* N( V[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
. Y* ?2 ~, d; b G) N[*,原理:
- H1 ?6 S! ?% s0 c4 ^[*,Int pointCount = event.getPointerCount();
! C0 V; ~2 L2 X+ q( W[*,获取当前的点击个数。
$ S3 Q" C: ~9 q2 r& z[*,ACTION_POINTER_1_DOWN5 }* C. g- o+ A9 D7 o: Z* n
[*,ACTION_POINTER_2_DOWN
3 a6 d+ L" c/ L Q% {! |: F[*,ACTION_POINTER_3_DOWN( u; |8 t& P6 L; o' G( e7 f0 {0 E
[*,ACTION_POINTER_1_UP+ _) ?7 d7 W" p, h8 n# D$ `
[*,ACTION_POINTER_2_UP
9 ]0 d% D' d+ i; m D1 x; L: R[*,ACTION_POINTER_3_UP
4 J. g8 m7 p( N' D3 C! T[*,ACTION_POINTER_1_MOVE
^5 u: n7 d/ U5 P[*,ACTION_POINTER_2_MOVE/ p- }( w: G* s( \2 U5 x6 B* y
[*,ACTION_POINTER_3_MOVE% u( ^* ]9 j4 U1 d
[*,[font=宋体,获取各个点的事件响应) X! V6 g& m. w d/ U! {; ?
[*,0 M7 T2 d8 k2 Z8 \7 U6 e
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
6 q5 z4 g, O0 \" l[*,[font=宋体,同理第二点也一样。: m% ~( T. k2 N+ @1 N- {# k9 S( O" K
[*,
) p$ x1 l0 y2 I7 V* h% Y, k: X/ I. y[*,2:[font=宋体,安卓生命周期$ } C$ p3 @1 `$ L
[*,[font=宋体,默认的安卓生命周期为点击应用图标
8 H/ m1 q' ]. y[*,OnCreat OnStart OnResume
" h, A/ n) g2 ^8 F0 a[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory" i% u" e) g. p8 \: g4 z
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
1 A: v- ]+ S" U a% H- U9 }1 j8 \[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
- m7 ?% X: o* m) M: e4 K' s[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;* n7 d1 ~! J# ~+ l. m3 K# |
[*,[font=宋体,[font=宋体,[size=10pt,所以选择屏蔽.[font=宋体,[font=宋体,[size=10pt,代码很简单只需要在截取到[font=Courier New,[size=10pt,Back[font=宋体,[font=宋体,[size=10pt,事件时[font=Courier New,[size=10pt,return[font=宋体,[font=宋体,[size=10pt,就可以了不要让他走周期流程' F+ O+ P! w3 s6 D0 ]4 h" V9 p
[*,$ \, ~6 R4 g9 Y7 I
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
4 o9 `* I3 y3 T- }* [' |[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.5 a9 |! R3 L+ X9 ]2 X. l
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
7 g0 f( [2 T0 K* {) V[*,[font=宋体,遇到问题:[font=宋体,之前是在代码中添加转横屏操作[font=Courier New,.[font=宋体,后来发现当转的时候调用了onConfigurationChanged.[font=宋体,并且又走了[font=Courier New,OnStart[font=宋体,和[font=Courier New,OnCreat[font=宋体,并且在他析构的时候调用了[font=Courier New,OnDestory.[font=宋体,导致整个生命周期流程乱套了[font=Courier New,.
1 T% k% a8 c4 C* ?[*,$ N" U( N& w6 K7 O1 u
[*,[font=宋体,[font=宋体,[size=10pt,正确的做法,[font=宋体,[font=宋体,[size=10pt,在创建[font=Courier New,[size=10pt,Activity[font=宋体,[font=宋体,[size=10pt,之前就将屏幕转好[font=Courier New,[size=10pt,,[font=宋体,[font=宋体,[size=10pt,具体写法 {4 p! N4 N( I% E7 K
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加9 P/ }/ x3 z' t5 { c G
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,5 G- p, p& G. U+ B; ?
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,# ]& S: Y! Q# l, G
[*,android:screenOrientation=[i,"landscape"[/i,>1 U) }- p8 v, E# Z( a% x, L
[*,
0 j; z2 ~1 y7 n0 E[*,( X% o/ x5 s; I6 \$ u$ v
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限( ]& \9 t4 _" v, d
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类8 C' ^. d* y7 f& Q# Y
[*,4 X, h2 ]4 M* ? j& Y
[*,读权限* w- C, z( P: I! \/ S, ]
[*,; u, f) L1 w$ @+ l
[*,
/ V W9 c4 Y1 ]9 y( L) I, o[*,写权限: ^- q: a6 ?9 x9 I, Y( v# v5 ?/ y
[*,
6 G1 w% Z6 Y0 f8 ?[*,: ?0 [1 D, `( u, N& C
[*,电话接收以及监听权限
0 e N _+ c' d) P1 }% {8 ][*,: {. g) p) s( u# M" D
[*,. e1 ~3 L: T* q% p K
[*,短信接收以及监听权限2 V9 h' N& F% `' k1 N. s8 v
[*,1 s9 V! H( h# g: o6 v" U/ ?/ J
[*,- _0 L, P' J8 }" ?- r+ G4 T
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
5 r4 c7 }+ I& j0 D1 f8 k! x[*,
5 x3 U1 Q, a& ^[*,
- L( |/ z. S+ z0 z, t7 Z8 }[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
5 K& ~" k' _$ i[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
: c7 p' y& R4 ^% E0 {1 F[*,[font=宋体,所以需要这种方式.
/ k% B5 F9 W. Z4 I% H[*,[font=宋体,在JAVA[font=宋体,中自定一个类
& f5 c$ P1 r: d* k[*,Class MyData6 O. Y6 a1 B/ W
[*,{
5 G& b. ?7 B6 C" {4 ?, P[*,Public:
$ P! ?# K. I2 u- a[*,Int a;
( p: `8 u" ]& V[*,Int b;" d# L! G( v7 i4 ^9 n. o2 L
[*,Int c;
, X6 m6 z- c- P; H[*,……..};
- \% n4 S2 E; N: K1 S. Z) B0 t" Z3 H[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
& Q3 [4 k% W0 u$ I+ C% P6 o& T# F% i& k; ?- D[*,public static native void GetData (MyData data);7 e1 n; r+ V0 O7 \( k
[*,JNI[font=宋体,层中声明: A% W. P$ _6 H/ S2 n/ t
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata), P5 D. V! ^- D i/ t! [+ u( `. ~
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
9 ? y" ]' d0 P) X" f[*,jfieldID sound = env->GetFieldID(cls, "a", "I");2 M1 J" Q* {5 z M
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值5 P$ \3 a) o, F |8 N( u4 C
[*,env->SetIntField(m_pdata, “a”, 5);
! B1 d! ]+ l1 {/ |3 h; ?[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.6 G4 T; |& Y, y5 p3 W! y. _6 e
[*,
- F- i3 @" j s1 W[*,
5 @* @, _$ x: U2 k% j[*,6:[font=宋体,工程搭建" [ y. y# z1 k. a2 P
[*,[font=宋体,首先编译引擎代码.) L( K% \2 w4 d! D$ t. O: D" ^- g
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
9 q; s4 c5 J& Z0 A3 {& M% q7 R[*,[font=宋体,需要重新 Cmake
6 l$ Q4 |. q1 W9 g[*,[font=宋体,编译好代码后打开ZSDome6 w/ y/ m" f" ]+ E+ D: q0 R& q
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下/ I# o n1 T) |5 V
[*,[font=宋体,然后直接直接运行即可.; d) W! |2 m H% Q: `( T
[*,% D5 v# I" r! F; D3 h4 {7 G
[*,对应接口
$ v. V, p- r1 c1 G( J. F- k4 o+ c[*,Android1 S5 L1 ]$ b% M0 ^2 u; i
[*,DemoInit----[font=宋体,初始化引擎. g7 G& t5 @. }& n
[*,Render----[font=宋体,渲染主逻辑
# z- A1 R/ S0 b" d( B[*,8 Q5 \& C4 \+ z1 R8 p% {' f9 U( z
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用( W0 h) T: J: d0 S! i; ]
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib4 b! _% C& s8 Q6 G; s5 }
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a2 g5 c# Q9 g& z9 m1 U* m( D% E
[*,
( A* e" E& W1 X8 s2 p& ?$ g[*,然后使用:# w3 n7 ^! q3 A3 X- p
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()) M4 U8 y+ x" `: W# m1 f, D, O: X
[/list,
[/td][/tr]