|
[table=98%," p/ h' z* ?" r
[tr][td]7 R( R2 r6 ~ C. I
; U0 i0 J7 {8 n2 F# d- w: Y
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,) Z1 A! r. a% n7 [0 b) _
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案& p& x9 V# x6 W. {, e
[*,
) t3 m+ x' z. I. n7 |% T[*,多点触控:0 Y: {/ H' x3 S+ z D0 E- w" X
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。" q5 F/ f* l f/ p6 B9 G. K9 z
[*,原理:% M& {: Q& w K0 f, h
[*,Int pointCount = event.getPointerCount();
# C! w9 A R" _- d% X[*,获取当前的点击个数。/ K F& G( `7 j/ O2 }
[*,ACTION_POINTER_1_DOWN
9 Y8 p0 t* o2 L1 P: B/ U5 q i[*,ACTION_POINTER_2_DOWN. ]( L" ^4 o- y! P0 q: H
[*,ACTION_POINTER_3_DOWN; @# {- W# n9 q. E% {+ e& J
[*,ACTION_POINTER_1_UP
/ O5 I) U3 w' u4 V8 h5 b- m[*,ACTION_POINTER_2_UP
) O) l9 b, O' q. H4 a. C4 i+ }[*,ACTION_POINTER_3_UP
: k. q/ I8 M- z/ j0 _- d% L( [[*,ACTION_POINTER_1_MOVE
4 W: L4 B: }3 {" N1 O[*,ACTION_POINTER_2_MOVE
; z& y3 k% {' [: G$ L4 ^( e[*,ACTION_POINTER_3_MOVE$ m S% R; N4 s/ z3 F
[*,[font=宋体,获取各个点的事件响应# q! D/ V8 N, B! {- u# m. X, c( `9 M
[*,3 O) y: N, j0 T7 B/ _* G- f; z
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。) ?. n% b; Y5 Q# F! l `; x1 q$ d
[*,[font=宋体,同理第二点也一样。
) ?$ j s# C4 @ `7 H[*,! X* a$ c1 ~3 ^7 {- B. \
[*,2:[font=宋体,安卓生命周期
% ]. e1 H. O4 b( `% b[*,[font=宋体,默认的安卓生命周期为点击应用图标
( O( m" j; E) O; ~& ?0 B, v[*,OnCreat OnStart OnResume, p8 u/ V- [# P$ u1 i: H
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
& n$ L8 ]/ J ]5 _8 T% L' d[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
3 n8 l+ X0 J) P% L[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
7 I- ~: ~8 \5 p( L[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;. Q. m# D7 [" r7 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,就可以了不要让他走周期流程
1 h, u# {1 s1 U& t2 q[*,0 Y' k8 A1 Y% {) Z9 S$ Q
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏( M+ [' Y. T5 q% Z
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
" A) M/ F% a- l, e9 L5 Y[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.1 K ?- [3 s6 C# e; @! w1 B+ u
[*,[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,.- y3 {3 _: i8 V- |0 d4 b; E
[*,
5 N$ D3 i% q5 o- ]" X9 F[*,[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,具体写法
$ \2 H8 |. L6 L( x( L' E[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
% H0 h- x+ B2 h8 _/ L* |! d8 o[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
5 h. [8 l, H" C6 Q) f; s[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i," k- R0 \. a! O2 s7 j
[*,android:screenOrientation=[i,"landscape"[/i,>7 Z1 }% X* z# W6 S& Q3 o
[*,& C3 D+ P* E) |1 \/ E! `/ x% p" `
[*,
6 Q9 L9 T0 _- J7 ^[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限5 G w4 v0 k/ N9 ?0 V2 J
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
% g0 E9 P5 _( Z! t2 O" d[*,# K- U. k! U; U' d
[*,读权限
5 I. P# F- M8 R0 o+ E* f4 |[*,
* F8 q4 G6 Z) Q( e3 l4 U% g& t! Y[*,
$ A" t7 ]1 V" l0 W" o[*,写权限5 f( k e" H2 V" f- a
[*,
4 s' `/ K2 C8 R[*,% \, Q+ w2 @- j) u
[*,电话接收以及监听权限
9 X$ B# I4 ]% W6 D[*,: K+ I0 W4 F9 u6 N
[*,
2 k, `. I5 C2 Q+ h" ?9 u5 I6 g4 n[*,短信接收以及监听权限2 E: i$ ]" _7 C
[*,
$ r: T% a( B! r' i[*,
) v1 D3 A$ h# R[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页: U, D8 D; Q6 M
[*,
/ z( S( ~0 R1 T4 `& r) u[*,9 s2 X/ Q2 y9 _7 S4 m: J
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
0 Q& \. l4 p' j( T[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
" q' Q6 m4 x" }[*,[font=宋体,所以需要这种方式.+ h9 C4 h; t/ B+ T; i! g9 }
[*,[font=宋体,在JAVA[font=宋体,中自定一个类7 X6 w/ \' B+ `: |/ {2 ]
[*,Class MyData
2 Q7 m0 l* K |" u3 j[*,{( Y! w5 p9 W% U5 w& |
[*,Public:3 m2 a8 a9 o5 {$ E* U o m/ y
[*,Int a;4 K2 Y1 f8 d8 ~
[*,Int b; Z5 a x- P6 o+ e. i+ q; c$ T1 h
[*,Int c;
0 f E4 U, T0 e3 U* R0 T" {[*,……..};" Y- m0 @6 ]# U# h0 [
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明+ H- C }4 k3 d; K$ L& w
[*,public static native void GetData (MyData data);, S5 o( ~) m7 a U& E# q6 f: F
[*,JNI[font=宋体,层中声明, b4 B/ c$ `: [3 |& t4 g3 Y
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)7 z# P7 a) S$ ^
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值4 T1 g2 c' Y5 T: I) {! C
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
* c. h! e, E$ }! D0 | C* X[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值% m. c0 a n# x3 Q! x1 v
[*,env->SetIntField(m_pdata, “a”, 5);5 b4 G6 T& y7 o
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.) s) p% V+ U! n2 c
[*,
1 ]4 v; R" {# y* Y4 \: \# g[*,
! k3 w: x/ i: M- h. J[*,6:[font=宋体,工程搭建
- M$ ~' |5 T" V) x: \2 ~ ^; N( K! q[*,[font=宋体,首先编译引擎代码.
# K1 m4 p$ X" L- @, e[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
# u; ?7 z. E- A/ z/ ~' t[*,[font=宋体,需要重新 Cmake3 T( q7 H7 i1 B7 n9 \
[*,[font=宋体,编译好代码后打开ZSDome
$ x+ i8 H3 F4 `( h: x, v[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
2 `& P. j Y1 I' \+ E" G" g[*,[font=宋体,然后直接直接运行即可.( x& m/ m5 k+ W& v; d6 N ^5 b% `
[*,5 v) z h: n0 y. S7 l
[*,对应接口
8 O5 j& k! C; P, [5 d* `5 }[*,Android o% m6 b2 s% k. }2 V- S0 t: K
[*,DemoInit----[font=宋体,初始化引擎
, q3 s; ^$ I5 I3 K' [1 j( _. V( A[*,Render----[font=宋体,渲染主逻辑
/ n+ i$ F5 x3 h[*,
. N; V+ \- |: s6 R i0 {3 J[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用0 z! b1 W& b% w- q2 _& z* {, s$ E
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib0 }. T' \4 v/ X3 Y, F0 W
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a% }' A2 J0 S. n, D# s
[*,
( h7 d: W0 u$ q! e6 H. {) g8 h, W[*,然后使用:( ^1 x3 L) ^4 H/ U6 @6 ^. X: p5 c- v
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()* D6 b/ J3 I" x- s
[/list, [/td][/tr]& v3 w' Y, R' p# u
[/table]- `, ?2 n3 |) S5 ]1 A6 j3 ?
2 q" v8 i0 p7 E/ V6 D# ^+ G6 u B8 y. T) ]. T
|