[color=#939ead,[list,* L. I5 C0 w. |3 X5 y/ B/ S
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
) z. F' O1 G* A6 R7 E7 m2 z X# q4 G[*,
- ?/ p* r! h9 p) ^1 n[*,多点触控:* U- \# _! K8 Y! x2 B: X8 @+ x7 O
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。/ g) C, V8 _- q& K0 I
[*,原理: J! a6 e3 a- u8 R
[*,Int pointCount = event.getPointerCount();
) _6 ~3 c7 o4 d! G3 W[*,获取当前的点击个数。
3 {# n: f8 e, P- @ j[*,ACTION_POINTER_1_DOWN% ]- w7 I# m% B7 X
[*,ACTION_POINTER_2_DOWN2 W, K2 e; |4 r& V
[*,ACTION_POINTER_3_DOWN
3 r, Q6 j1 k' h6 j- b0 I[*,ACTION_POINTER_1_UP+ W. |2 v+ }' O, h! s( O' g
[*,ACTION_POINTER_2_UP
4 E& Y1 e' J) O" L3 m( T9 N[*,ACTION_POINTER_3_UP# C9 Q$ ^/ u1 ~( n, |
[*,ACTION_POINTER_1_MOVE
, I: F# d- M* ?[*,ACTION_POINTER_2_MOVE
. P. E4 [+ l8 l1 c( E. [: a3 j" K[*,ACTION_POINTER_3_MOVE
; b+ P9 a0 {/ Y) S$ i% |2 L. k[*,[font=宋体,获取各个点的事件响应
' b3 J) G( N; n& Z- R: p4 u9 M6 I& E[*,
! a" N! K0 [, u[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。# ?: P6 J2 O! q0 `- z
[*,[font=宋体,同理第二点也一样。: T3 b6 T: Y; Y' b1 E6 M; W
[*,
w. f& z6 f; u* l5 b3 B1 J[*,2:[font=宋体,安卓生命周期
. s' a4 q+ ~! l- b3 e[*,[font=宋体,默认的安卓生命周期为点击应用图标, L+ {' F/ D8 g: f1 e
[*,OnCreat OnStart OnResume7 d9 u7 c6 l. R1 W: ~/ ~/ l( i
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory! o% T' N3 s! d
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
. }; N7 b! w Z4 Q0 j8 G[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到; m/ N! t' I% u- y7 d) X) f
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;* h3 W8 R1 K$ u8 {- V1 G
[*,[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,就可以了不要让他走周期流程# |5 `+ A' c# H: m0 e' }
[*,
6 ~- ~! l+ P2 Z: g7 C# c* c4 q[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
1 N4 A$ ~: ?5 {[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的./ _+ [8 A. L5 E- i/ j3 e! |6 |
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
8 A4 T% u1 [& G8 c+ d[*,[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,.
( X+ g9 w* A B. b& b[*,
1 _* `+ S/ v) b3 a9 W$ ^) R[*,[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,具体写法
1 Y s j! S; F, Q7 T' Y* l[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
& f7 _. Q7 W5 Y* E0 a: P+ ~0 m& P[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
/ B1 a6 V# D8 d0 H7 f6 `[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,2 ^6 _! `/ }4 [
[*,android:screenOrientation=[i,"landscape"[/i,>2 o2 Z* F8 R% h0 i: p5 I
[*,
. S, j, S$ t! C[*,
9 y! N+ Q7 X1 x" t+ s, a[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
4 X; M# l! l0 y# C) F6 J8 D; m[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类2 Q: z: P; p+ \( \2 B
[*,( ^" O' C( ], w$ P& Q
[*,读权限
2 z: X5 [1 f$ c& T& {+ i# o" [[*,! [* p7 Z# v7 g
[*,- ? L4 y1 ]5 \7 q* q# k+ B
[*,写权限
6 T3 s* J( }) {+ f- A[*,
$ L! y! J% K6 e0 B7 `* k- u. T[*,
# k2 Y1 z q" C9 J! ~; A3 j- F[*,电话接收以及监听权限
" k4 D. P) N+ [0 f& l' f9 c3 G5 i[*,. o1 g* F) p( Z1 @
[*,
3 d. n# f! _* o+ n6 }- }[*,短信接收以及监听权限
0 Y& b; O. z' R[*,# r* ]$ \ x8 J2 O; z/ U# |% m
[*,
. {( p1 L) k, G6 u+ U[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页' h, i' N c. d* ^
[*," d B, C# k3 @$ q) ]
[*,
E+ B" `; n- T$ P' H8 j/ X( p[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
( {& c/ d: e) x( R8 Y" S. I[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
! f9 @9 i0 |2 c" \) R8 f4 J[*,[font=宋体,所以需要这种方式.6 _, |" d8 |: T( O4 V) {
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
) I% o2 m4 q7 \8 F[*,Class MyData7 M7 W/ I( g! y5 s
[*,{# o5 i+ Y, Q2 j( t
[*,Public:
( @2 _6 z" D; `8 G2 v9 g# I[*,Int a; u3 f2 {/ N: A' S! i4 K; n
[*,Int b;/ i: z; y+ L5 _3 l
[*,Int c;: q. |5 Y l# [! t% C
[*,……..};
9 i( X) [6 _5 n- G8 c[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
( N2 l; F \3 N0 J3 p( E[*,public static native void GetData (MyData data);8 ^& F! t* E4 P5 K$ S0 _9 b
[*,JNI[font=宋体,层中声明7 v9 F0 n; K8 K' H) \1 i% a
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
. V/ c; h7 m6 J[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
) H. r! ~. p% o[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
+ a! o# n. r k% A[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
4 Z$ Z5 M5 f3 r2 Z3 O[*,env->SetIntField(m_pdata, “a”, 5);% u+ d5 C' `) e S$ l! V2 q
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
! G' F. x7 C3 o8 I[*,. n+ X+ k6 ~1 p' Z
[*,0 T$ z x) e( Q8 }' w# ]7 ]
[*,6:[font=宋体,工程搭建: Z0 B. u3 x2 \0 _, C
[*,[font=宋体,首先编译引擎代码.
/ Y7 ^1 q7 z ^& r" y' u[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
$ n5 F( }$ W! Z# P8 @* G[*,[font=宋体,需要重新 Cmake- y" f- i7 l0 |6 i. G& j7 u$ q% x
[*,[font=宋体,编译好代码后打开ZSDome; D) ~# z7 `; n; B& O
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
8 i8 \. L( B7 b5 p[*,[font=宋体,然后直接直接运行即可.
( }2 K2 g8 x( _: J4 w- e8 j0 C[*,
2 e1 ^; ~% J6 C; o9 ?& ?4 Y[*,对应接口! D7 \9 l; w" y! q$ L+ N
[*,Android
( {: X! X( D- T% z[*,DemoInit----[font=宋体,初始化引擎
: c+ }$ y0 a8 K$ k[*,Render----[font=宋体,渲染主逻辑
2 n# N1 i5 w& W4 C[*,/ p2 @3 A% V) I" t0 r; S* k
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
0 T# G/ q9 g/ E# A) [[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
7 y, d2 @- h! H0 k' j3 Q[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
/ @: v" _! W# x5 x[*,
9 j& e; q8 w6 W0 {, E) o[*,然后使用:
, a+ `) g/ }" T! a2 c/ S; ^+ a[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
: N, T. [- \9 c5 U$ I2 F[/list,
[/td][/tr]