|
[table=98%,# ]9 H* t! u+ x, h: K3 t# U
[tr][td]
1 B3 [, e2 n; x1 m3 G; T) H7 a8 o' t
) I/ Q. m* a4 Y[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
$ p2 C: j0 r) e3 X5 u& _9 Z F p[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案6 p4 `- ]% O# B* U5 _* q5 Z0 M
[*,, @0 B4 e$ X) `7 D
[*,多点触控:) r, a9 l7 B: ]" m0 y2 R- r
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
0 E8 w) Y4 M8 e. P; x0 ~[*,原理:; A* s; u6 p P6 ?: T; D3 }
[*,Int pointCount = event.getPointerCount();2 J, Z2 @! A9 h
[*,获取当前的点击个数。" g" W% ~3 C. M! {2 u
[*,ACTION_POINTER_1_DOWN
; V3 ]) L2 U# [* H1 r! `[*,ACTION_POINTER_2_DOWN+ c2 r& f9 E! K7 Q0 \
[*,ACTION_POINTER_3_DOWN
$ V3 f6 L b$ D5 q5 J[*,ACTION_POINTER_1_UP
$ W8 w% [' Q6 q# V, |[*,ACTION_POINTER_2_UP
+ O% v! q: O0 }[*,ACTION_POINTER_3_UP# W) N) y& Q3 |+ @. [0 d. ? T
[*,ACTION_POINTER_1_MOVE& c$ l8 H7 ~ g
[*,ACTION_POINTER_2_MOVE
2 r1 r, \0 a( u! s% `- X* h+ O[*,ACTION_POINTER_3_MOVE
: A, q0 p9 V5 n i7 Y; x' I[*,[font=宋体,获取各个点的事件响应5 i2 t& \; `8 v
[*,
; c% h; _3 x" v$ q; U[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。' [- ?9 |5 C1 @8 e1 e
[*,[font=宋体,同理第二点也一样。
. |# g5 l! h# ^9 W4 _" G) V[*,+ M) h+ d2 a# T4 o N7 O
[*,2:[font=宋体,安卓生命周期
5 u9 G5 d3 s" [8 d[*,[font=宋体,默认的安卓生命周期为点击应用图标
" Z' h6 i3 q: @$ v8 u/ K9 c$ Z[*,OnCreat OnStart OnResume
5 e0 L! } S7 V( a* x6 W[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
$ K6 D& Y9 A; o7 X3 p z[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.- b' C) ]( J) a& V
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到8 G0 A' S5 c: }5 J- Q
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;) d0 p% \! D* m, x0 Y* n' [/ P
[*,[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,就可以了不要让他走周期流程
+ O6 b0 o! Z' P& a B[*," y2 Y) s! F" ]( W& f2 b
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
. X# E# K2 V4 v6 V! @: F; n+ r' [[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.. Y% U- s3 Y! A
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.5 B7 ~( w* y0 m, }" G
[*,[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,.
; p) z; i! j- D& k! g[*,! e/ c/ x d/ r$ S- _+ K, v( d+ N' J
[*,[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,具体写法
! k2 g0 `/ Q6 G0 `[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加* U( b/ ~+ B! ?5 A+ j+ m
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
% E2 b# v, I" @: j1 S[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,' o# }" t% P) [& \& w; [" X8 U
[*,android:screenOrientation=[i,"landscape"[/i,>
# v) L+ c y; h: d9 @3 C/ C5 Z: R[*,
7 J) m- F1 p" ], w) C[*,$ c) c0 F* M; R0 K+ j+ [
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
. L& I: A$ |& C& F& S7 {. |- P[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
0 a8 t0 M+ O. [( V# { O5 H[*,; Y& g, K! s4 c+ E. F1 {% @4 o+ C
[*,读权限
8 o% l a r' s: m- S[*,
0 _' a; k& m2 D8 e5 {[*,
$ k! ]9 D( `6 ]) r[*,写权限/ r5 W4 d; J g7 w9 |" ?! Q q
[*,
' p. p; c4 B: }9 d[*,
* O/ u$ z8 s$ F" H& P" X+ Y* C! J, |[*,电话接收以及监听权限
8 y8 ?) q! k* { F( S' C' |[*,+ X% G5 v) H) Y/ I$ {9 a _" p. D; V
[*,. d# S8 P; P+ N+ T
[*,短信接收以及监听权限4 [) s4 z+ |9 J% C, q* W
[*,
8 V9 G; [/ s) H4 o7 q% f8 |& M[*,6 w5 e. C. K _/ @ q
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页* Y, Q: D$ _$ Z% a
[*,6 C, d2 [& t" _# T( R
[*,
+ E5 }, R; Z, y Y F4 X7 }[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互1 S B8 g* @& B5 h. p
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
5 A; F4 s- d5 S[*,[font=宋体,所以需要这种方式.
% o2 A' e3 p- Q5 `- W) p; p[*,[font=宋体,在JAVA[font=宋体,中自定一个类
, j. I5 S, |( J[*,Class MyData( o- t# g: u/ x
[*,{7 j5 ?; u! k2 O: K) d, l
[*,Public:
: V8 `# j; G7 S[*,Int a;9 K3 E0 u H9 m: u9 z
[*,Int b;
# w7 Z. h8 x) P5 V& U[*,Int c;
4 W9 I, Y5 S7 n G* p[*,……..};3 `; E. t, n+ M( z+ f8 a
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
; D J3 R% n- z& g, |[*,public static native void GetData (MyData data);' k& b! z! k; [6 z+ ? x" J: h
[*,JNI[font=宋体,层中声明
& b3 X; V* [9 \$ F: C; n[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
, [2 @) A$ C$ b: w0 g6 C! ?: _2 h[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
3 S- z. N& O" s7 h" ^3 Z[*,jfieldID sound = env->GetFieldID(cls, "a", "I");* b; n% }* f% R& b2 k
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值- M! N4 w, U& F* @) N
[*,env->SetIntField(m_pdata, “a”, 5);
; Z; ^2 N+ ~0 y& m4 l[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.3 @, T+ {; ], V) L' c2 L, j
[*,+ R7 g! J: }5 E. _
[*,
+ @' u7 i- K, \2 C! U[*,6:[font=宋体,工程搭建
7 z1 N* ?4 k! ~5 V A, S[*,[font=宋体,首先编译引擎代码. g A8 B8 }$ \( E( _6 i
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
K) J% f! N: R1 c9 N* Z$ |+ ][*,[font=宋体,需要重新 Cmake
& b8 [8 e# q( W3 u) c7 ]0 k[*,[font=宋体,编译好代码后打开ZSDome9 y) e/ |6 f4 g) T m, Q- q* c: `
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
% L# D3 ~! w0 ]$ p! U[*,[font=宋体,然后直接直接运行即可.
' d9 A+ U$ Y& E: |- [: O2 [[*,8 ^; H; X9 b3 b) Q3 {8 S$ ^
[*,对应接口
) \. d; H9 |! |[*,Android; f* w: ~$ r, r
[*,DemoInit----[font=宋体,初始化引擎6 [/ m f6 k- O- U" S
[*,Render----[font=宋体,渲染主逻辑
& W6 F: s6 x! d+ L# Z9 b: @[*,4 [ n1 P# | F* C
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用. s0 y, P8 P8 L% F# A* q
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib- Q& p6 t2 L% V* l( y9 B* n
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
0 F) _( d5 L0 n9 _4 D: J[*,
( S g; C+ v7 S2 s5 z5 V, i[*,然后使用:- S5 `, r, `3 z3 Z$ n: m
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()2 ^7 a4 B" B, b! F) r
[/list, [/td][/tr]/ g. u1 x+ b; S# B: x6 @
[/table]2 U+ i) T; T7 C$ j
+ Q4 ~' g; A8 _3 _! J
- U. z3 [) ~* V" | |