[table=98%,5 j) j% S" g# M
[tr][td]
( v" O6 u6 c* ]& h! W5 R, i1 ~0 i$ J# ]
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
$ o4 v! d+ b6 X: e2 w. H[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案" }" o3 |/ ?3 H6 r! z% c. @% e
[*,
" D) i/ o5 b' r* r( T; m[*,多点触控:. z) f9 o) u; Q
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
6 R4 p# U2 W' Z[*,原理:1 `1 A3 @5 b1 g" ]3 F' C
[*,Int pointCount = event.getPointerCount();1 P3 I$ t+ W/ K! k
[*,获取当前的点击个数。+ i8 x* T$ {- \
[*,ACTION_POINTER_1_DOWN
9 H0 F2 {/ J2 ^3 K* b0 u[*,ACTION_POINTER_2_DOWN
6 y, t5 U" v- Y }; a3 |& ~[*,ACTION_POINTER_3_DOWN
! L0 S7 n# Z) i! Y[*,ACTION_POINTER_1_UP
- G% k- y3 R c: x' Y! d" W[*,ACTION_POINTER_2_UP
* p# K9 p" I0 E0 P9 ?$ h+ f[*,ACTION_POINTER_3_UP+ A6 S2 x2 D9 g0 n8 ]' b
[*,ACTION_POINTER_1_MOVE
" @, y9 o$ u0 p: w0 c[*,ACTION_POINTER_2_MOVE I' Y% y5 W! Z8 O
[*,ACTION_POINTER_3_MOVE0 Z. d$ |% u# S, [& g
[*,[font=宋体,获取各个点的事件响应
2 Q$ a& z' k( e/ M[*,+ n; P6 _7 j6 o3 T/ c) |5 w/ [/ F
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。 d( @0 F1 G f1 q
[*,[font=宋体,同理第二点也一样。6 {. ^) _9 r4 [$ Q# }
[*,- I: I, s; h, g# ?3 B
[*,2:[font=宋体,安卓生命周期
2 }5 T( ]3 L' Y0 X[*,[font=宋体,默认的安卓生命周期为点击应用图标
- @4 K# _+ ^0 k# r+ e& ?$ V+ ~' \[*,OnCreat OnStart OnResume; r- k# a4 i6 r8 k$ W) n: N
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
/ K: r i1 I C/ \& ^[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
% A4 H; S% V# C% q) Y4 Y[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
8 l' w& W" D$ O, O! x/ N[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
1 | [' t2 l7 _+ I! 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,就可以了不要让他走周期流程
7 i# W9 V3 I, n9 B2 q9 b; D- D[*,& W$ A) |9 W$ k9 Z) p
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏% g1 [& C$ n5 _
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
, P! k5 A4 N1 N, ^& W[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的." W2 U0 t$ ]1 @. G$ K2 t& l) | b
[*,[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,.
8 D" V; k& e% S$ _5 w[*,6 z; ^* g! Z+ u, X
[*,[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,具体写法
8 b$ Y) s7 Y3 l[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加1 {3 q0 m& V. Y. d3 ~0 J& D, v3 H
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,& @+ i1 J) ]% t7 `' y/ w* _
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,3 |; B- C7 P- o, d0 y
[*,android:screenOrientation=[i,"landscape"[/i,>
" q+ _3 x* d0 ]7 K[*,
* n6 o( A( M- [# x) k[*,
9 P v3 d% j% x6 ]* k[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
& {4 K3 k4 l6 \. H! U/ i[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类9 w5 D5 b: l' Z, |1 t. Z+ A6 ?( s/ G
[*,
% z* v/ k9 m- ?[*,读权限
4 K2 p- _. `3 V8 W( x$ R- c7 V[*,. W5 a0 V) [9 `" f( u' {3 b* v/ I: p
[*,+ q3 o5 c+ @2 ~
[*,写权限
# u n, ]$ j; m/ V, C2 ^[*,
: t; a2 I( x) C[*,7 G' B3 @8 _: Y, f4 a9 W
[*,电话接收以及监听权限
; t1 n5 ~: P e7 P9 J5 Q[*,) m7 b* d$ R$ K& @% J3 X
[*,9 K3 B6 E- |6 R! w T6 r0 s
[*,短信接收以及监听权限
, [) ?( j5 O- L* j( Z$ |. f( z[*,( P4 z+ T; F+ I0 C
[*,
& g- I* C2 C" r[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页3 R5 z3 @$ |- [1 y- W1 C; a
[*,+ u6 @3 L# [& T+ i0 _7 z9 ]; p8 {
[*," z+ _" B/ C/ }) C4 j3 B0 _
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
4 l+ m5 B! A x/ {7 j8 N' n[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
) L6 c. U: o) B M- A[*,[font=宋体,所以需要这种方式.
. b' R: I) A/ { T* z9 X& n[*,[font=宋体,在JAVA[font=宋体,中自定一个类1 l7 A. c" `; s9 X3 t2 ?* q* D" E
[*,Class MyData
7 x+ e- D% ?! \( T[*,{- E7 Z. \+ s) O: Y; N2 C
[*,Public:
8 R& D9 x) y& r/ T: F[*,Int a;3 E3 A0 s& F- D# L" [
[*,Int b;& [7 C3 w1 y2 [
[*,Int c;, A, y6 c# w5 T% D
[*,……..};
0 l6 Z8 N# x1 h7 q7 u: b[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
) {' D, E! v; j3 s) b( m[*,public static native void GetData (MyData data);5 I8 V0 ^# }4 m7 C
[*,JNI[font=宋体,层中声明
: j4 ?3 ^) \( _$ y3 l; a3 `: O[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)! F' M6 @6 [" p4 x$ E' \4 b$ [
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
' Z- M" ^6 P% m1 x" }! y; _[*,jfieldID sound = env->GetFieldID(cls, "a", "I");7 N9 ]( \- P* v
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
/ U( `/ N: e0 ~9 j7 G2 o; v[*,env->SetIntField(m_pdata, “a”, 5);. F5 k! \4 {9 B$ \7 A
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
u S! ~8 a7 J1 D+ U, B[*,
3 |3 w7 r9 Z- \ o& n9 o5 c7 [[*,- F6 H3 |6 a( ^6 ?3 X% w6 C
[*,6:[font=宋体,工程搭建: n7 r4 o1 w o/ f9 A
[*,[font=宋体,首先编译引擎代码.
' g! @: ?* y- t0 S[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.- p0 U; Z+ Y6 W- l y% b. H9 S
[*,[font=宋体,需要重新 Cmake/ E8 b/ ?* H+ `# w0 A2 ~
[*,[font=宋体,编译好代码后打开ZSDome0 E' V+ M3 p8 h4 V4 K# w( n9 M
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
, o* B3 {$ N) d2 \, Z[*,[font=宋体,然后直接直接运行即可.0 J- i! ~ @) e( p1 o* I' Z# Y( F
[*,1 E2 r$ C, M- S7 `
[*,对应接口
5 z8 S9 m4 w: @4 [9 W[*,Android* Q0 Y' a4 O. L
[*,DemoInit----[font=宋体,初始化引擎
# n7 |0 {. E) W$ J4 ^! a[*,Render----[font=宋体,渲染主逻辑
' o4 Y- L8 h% p' B* Z7 b/ N[*,! V4 w8 e X& S v9 z7 t7 J5 X$ Y
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用9 s" q" z" ?5 f# c9 Y
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
* |$ k2 {8 P: U% v$ i2 g+ B[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a6 E @/ n" _; r, R( `/ ~% p
[*,
5 [7 `. s+ K5 ]) d# S s3 x4 Z[*,然后使用:& M6 ^$ O4 K& P" c- l
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic(): K3 o% b( k0 l% @
[/list, [/td][/tr]
: ~. s# l0 A/ }# g; I) T, z t[/table]
% _/ }* M! N( _" x7 q7 J/ D+ v$ Z4 ?# i1 r
# r5 T/ r1 b" D a$ s! I. }
|