[table=98%,
0 \1 k! R# p5 j0 B[tr][td], C! `0 F9 l5 U0 s" g5 j5 Y. ~3 ^" j
# C& O9 }) P; k0 h6 \9 T8 ]
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,6 p9 y: g$ x. T$ e3 a1 H; v
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案: w4 G" E3 O) }* @! ^, o5 b' a
[*,. |- y% z, f+ \4 y) X) L F
[*,多点触控:
; Z, \- @$ J% `$ F[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
0 O) \ q8 R9 m/ u[*,原理:
# V. b& C3 `0 ~) Q- E[*,Int pointCount = event.getPointerCount();
+ t* t5 r1 _2 q7 e[*,获取当前的点击个数。
7 D+ }& U0 j0 x[*,ACTION_POINTER_1_DOWN6 M# K) o+ F; Y2 a# G
[*,ACTION_POINTER_2_DOWN5 ]0 q/ k0 L/ |
[*,ACTION_POINTER_3_DOWN: P" i4 L. G9 j: h6 [
[*,ACTION_POINTER_1_UP
; N! ?3 P4 d; G O! r, D' O[*,ACTION_POINTER_2_UP/ H$ j8 K; l# u
[*,ACTION_POINTER_3_UP
, c% R+ _2 S! s5 W! |; r[*,ACTION_POINTER_1_MOVE! X9 D" t! X/ H3 o; Q
[*,ACTION_POINTER_2_MOVE
2 u% z2 r9 `; l, ?8 y[*,ACTION_POINTER_3_MOVE9 e% Q, J0 ]8 _' b) {% M/ c
[*,[font=宋体,获取各个点的事件响应( R [ G4 p/ T7 U
[*,6 V4 T. r; ~1 H8 r6 D
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
4 U+ t7 g1 y9 l' w( D[*,[font=宋体,同理第二点也一样。; r0 b. o/ o( \* ]( o2 D$ v. ~. O5 m0 ~
[*,
: ]7 B) u2 I: _( u[*,2:[font=宋体,安卓生命周期
4 Z" q1 h1 s. P8 a; _: s[*,[font=宋体,默认的安卓生命周期为点击应用图标
6 H" b, W* M6 o; x$ t) ?[*,OnCreat OnStart OnResume% T0 j [. j4 R5 |3 V! k
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory* P6 P' z. z5 e b6 O
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
% R( r2 |( l, r: T" ?( l1 r8 g! @* o/ p& H[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
* G& P8 i h! C* K6 D$ M$ e/ v9 V[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;3 |! B. C3 {, V x
[*,[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,就可以了不要让他走周期流程8 _) \1 E! k. r' ~
[*,+ r' U7 a. m* ]7 h W
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
' B, z% U8 [3 ?5 O[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.+ Q# z0 i- X- N. r
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.7 X; H* P' q4 l4 G, r
[*,[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,.
: u/ b+ J0 p+ d5 ^[*,
. K% |2 E- V5 M- I& C[*,[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,具体写法- l3 a4 F, ]% g+ c
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
* V0 B. K: O% [" X& A6 l" b[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,# ~/ x: F5 m" P, A4 G
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
9 v/ c; {) m$ H[*,android:screenOrientation=[i,"landscape"[/i,>
/ o" |. `' [- B1 w, q2 {[*,6 z' Y7 @3 o* d+ J2 M1 B
[*,
2 d" V! c4 b( S& _0 ] j) B& Q[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限3 m+ r4 j& U" L4 Y, C
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类# G1 H- O) o5 W3 P0 Z' ?$ m5 y
[*,' c+ P+ G- o5 M x) e6 m4 t
[*,读权限
, I/ Y; @8 G4 z[*,- D' r6 r) c9 i+ ~
[*,
9 q& F! X7 ?- L$ b( O[*,写权限
5 u4 @" \0 `) [! A[*,
1 J8 e" {3 z3 P; t# F: p[*,
x2 i/ L' s& |8 a$ V[*,电话接收以及监听权限
" ]( t* A' o0 C0 k7 ~; y: M0 l[*,
3 _' X* x# x" \" Q n[*,. e" C# u K. {9 e" |0 f
[*,短信接收以及监听权限
" e9 ^8 z! W6 F- r3 P: N! N$ {[*,
: y H. I% Q" z" |$ s[*,/ N: I0 _6 P2 w: q% a
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页0 z8 w6 G. Q2 L3 d+ n
[*,) c$ J$ i C% F" V/ [
[*,& y, ^- \, [5 s2 q9 B+ N
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
6 l- [0 E' b8 l) O[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.: O4 o& A* U1 S, w y
[*,[font=宋体,所以需要这种方式.0 s3 [ W, b9 ]0 @& w& f* }
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
8 X' c3 f3 N7 p# g6 V& S, L[*,Class MyData$ T( I) V% J+ c5 H$ u( ?* `
[*,{* v' ~7 v$ i8 x+ a7 l# Y& c
[*,Public:
' `$ D+ G/ P9 D[*,Int a;
# _' F5 n& h+ C" g% T1 k. q! @[*,Int b;
3 T2 B: i% I) }[*,Int c;
6 v4 s' t! |; s$ ^[*,……..};. X: W9 X/ O8 {3 d) g" ^
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明- U8 C# |6 ]- Z2 F* N& s, ?
[*,public static native void GetData (MyData data);6 W8 d9 S+ N" ]- G% _" s3 l: }9 Q* Y
[*,JNI[font=宋体,层中声明
& A3 |. C- ]& B% L6 M& ?; a) C[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
# J; ^# L+ F Y6 Q* b[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值* e# y p( ?$ N* a
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");: b. N; P' `$ m1 j. V% l
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值' ?5 h/ o( i( U) ~
[*,env->SetIntField(m_pdata, “a”, 5);& ~) s4 p9 Q- h
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
8 G3 Y" }& ~! }/ t9 y' A5 B[*,/ T! k0 T( A; C5 | U) `
[*,
$ G. M n+ h9 Q6 Z0 u: W' J[*,6:[font=宋体,工程搭建" H c9 H* Q% n5 R: ~6 Q
[*,[font=宋体,首先编译引擎代码.9 o6 Q3 k! {$ }
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
7 A0 r8 W9 T% {1 W. K[*,[font=宋体,需要重新 Cmake
( a, _3 I- ?! K' H$ ][*,[font=宋体,编译好代码后打开ZSDome1 l: [( C2 ^' l2 p4 i* x- j, M
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下1 @! k3 \4 _/ A7 w; l
[*,[font=宋体,然后直接直接运行即可.
3 c0 \) K, A* b6 {: J" \, c) z1 j[*,
) p# B& e% P+ _. l[*,对应接口
3 S; }( q3 D% a, h8 Q[*,Android3 r1 e, {: D, g- u
[*,DemoInit----[font=宋体,初始化引擎
( w; P. B- ^4 P1 Z[*,Render----[font=宋体,渲染主逻辑% T( O8 @( D' s
[*,
4 P+ V5 z. V& ?[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用/ I9 r' a; N, d* k
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib( M/ z1 |1 j5 t6 K# u3 o# i
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
8 Y, x) Q6 Y' U[*,7 L A# y2 m% d
[*,然后使用:
% I! g; H: q' ~: n) j[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()" l( c# L, J( S' }9 D; e
[/list, [/td][/tr]2 c% |5 A3 F% m9 U
[/table]
8 b) N5 d% F5 V' E+ @) ]6 k# Y2 L) S6 R
* W2 s0 v# A3 L$ O! @5 P) X$ I# f% e
+ W' D, J& ~9 F0 z |