|
[table=98%,+ S& a" I: K5 ?$ [6 [( h# F6 l
[tr][td]9 J( D1 S4 O8 m* v' i( M e
; |3 d, |) e! J+ x8 t
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,: E% Q M7 j& g* F
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案' B: B( J+ e5 Y( i; z6 Y0 S
[*,
6 T. g t2 H; |* q" R; h[*,多点触控:
' {1 _3 C" h, k2 {( @ ? u1 {1 a[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。8 M- e) X* S* R' O) D) z3 [
[*,原理:2 i) s8 v, U a: v9 n
[*,Int pointCount = event.getPointerCount();- I% q0 u$ L" {/ e. B: N1 G
[*,获取当前的点击个数。
1 [: t; X( F3 ~3 d Q, `& s, R[*,ACTION_POINTER_1_DOWN
- j! z" m7 n; `) ]( t5 F4 B[*,ACTION_POINTER_2_DOWN
6 F( ~( v7 Y/ _( s[*,ACTION_POINTER_3_DOWN$ G! d& _3 n% T" h2 j2 g
[*,ACTION_POINTER_1_UP9 V% C( {- x0 F2 A" }
[*,ACTION_POINTER_2_UP, _) P1 S1 x/ @& n- e9 l3 _2 M! O: h
[*,ACTION_POINTER_3_UP; @9 M" H2 J! x4 p$ f
[*,ACTION_POINTER_1_MOVE ~8 h% W! v# a! N* b" O% U
[*,ACTION_POINTER_2_MOVE
/ f( S) O1 X: b' m4 Y1 S[*,ACTION_POINTER_3_MOVE/ W; [& b, W0 W$ U
[*,[font=宋体,获取各个点的事件响应; p4 f# t& R$ I2 [2 r
[*,& e( z' R( B" L4 g8 c' [, F( q( v5 _
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。2 W E" K7 n. E% f4 m
[*,[font=宋体,同理第二点也一样。
0 L1 |# y5 E+ n1 e[*,5 T& w( f4 [1 S& t- z( d3 j- V5 e
[*,2:[font=宋体,安卓生命周期( a( u7 s! X1 g# |% l1 U0 d
[*,[font=宋体,默认的安卓生命周期为点击应用图标
8 |0 w8 N' K, I& y, [[*,OnCreat OnStart OnResume
9 O" M; @( D8 O" k2 t$ O+ S[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory/ I- u8 S' V) a3 B7 f2 X
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
5 M" [& Q9 _) w: J[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到0 f; G/ Q8 A" Y+ }' t! G( _9 }: f
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
6 ^' G) p4 h& |* K% P8 i[*,[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,就可以了不要让他走周期流程0 h7 Z }% t& z4 r' v5 g0 R$ I0 u
[*,0 m5 U/ f; n+ g- ]+ z
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏# K! H% t+ o$ c: b. M
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
5 {# r, @+ d# N+ j/ \, t# Y7 G# R[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
- \* ^& ^# B4 @+ C! \[*,[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,.7 A+ z% n/ [: A9 v. u% y
[*,
6 v1 k/ x5 D q4 x4 n[*,[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,具体写法" g) o$ a7 ^! `7 B, N
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加6 q4 [. n& _" [
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,1 d9 c! @9 s0 _1 E5 i
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,5 l$ x& }- }+ E, p) b
[*,android:screenOrientation=[i,"landscape"[/i,>
& U' M9 Q0 {# R7 s9 _7 [- g) o[*,+ {6 M. v, ^$ F9 |
[*,
9 [& e6 b& P& x4 z3 A% u[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限% Q5 Y* E8 j+ Q
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
. G4 h, e& D' w# C0 _ \[*,
: r8 F, Q3 Y# X C' M$ u+ Z[*,读权限6 `2 T7 d; G) L/ p
[*,
/ [3 T6 ^/ T6 ?8 l3 j0 N* T+ j( v[*,
5 Q5 r: T7 p$ q9 I2 E$ c[*,写权限1 Z- T e8 p1 I+ {- _
[*,3 y' ~; K5 ?% m1 x8 j- A- {
[*,
5 L s. I. L* e" X) f' C[*,电话接收以及监听权限4 v- x2 g0 C+ Q7 C# L
[*,; @7 j: M: v' E+ I; T6 d
[*,
2 O/ ]8 }2 t. S% _2 p" N7 \[*,短信接收以及监听权限 O1 q; C4 p/ ?: q* U8 ~
[*,) u o' V' m" L! h8 A" L
[*,* \0 U/ I- H6 C- M* {% a8 |
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
* U1 K' L& v' F[*,
b9 O9 q c) M0 ~% b+ k: |[*,2 ^+ q3 `' Q' \* [- f. o
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互7 \5 l5 N4 T% w/ S
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.. { \- ^; h+ R5 G; e( q
[*,[font=宋体,所以需要这种方式.
. }( I: q' _1 P9 Y[*,[font=宋体,在JAVA[font=宋体,中自定一个类; n9 k( Z/ ~, H
[*,Class MyData
7 ?$ ~8 L) [+ E) D[*,{ h# Y- O' F5 L# |# ?
[*,Public:
5 G2 C4 Y) X! T: ~$ d: r[*,Int a;
& _/ L: R6 V* }0 [[*,Int b;
4 ?0 Q; {9 w% m6 z$ K2 W* q[*,Int c;' r0 I+ v. m3 H& p% {7 `4 f
[*,……..};
/ F( B3 |9 l9 b7 f[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
( f+ H4 F! Y/ t) D( \6 v4 E7 b[*,public static native void GetData (MyData data);
. T) A8 K2 w% I4 D8 f: t[*,JNI[font=宋体,层中声明# H( O2 P8 Q6 q& |/ T
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)5 D2 l' p, a; A9 u
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
+ u" y9 N7 t- d[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
( Z+ t! j, p9 {- w6 U1 ^[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值: f+ n- {- D) n8 a! @1 v
[*,env->SetIntField(m_pdata, “a”, 5);7 S# j$ O) K2 M: m' ^% Y; h; R
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.4 d4 p- L: n! U+ [
[*,. n2 S% W: [( s) G. \7 c7 a! W
[*,
. d( h( K4 D- R5 |* Q- e( `[*,6:[font=宋体,工程搭建, O1 q1 i" U. e7 A8 G
[*,[font=宋体,首先编译引擎代码.
0 T& f+ Q5 j6 U) G[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.+ y0 l6 ]2 z+ l7 T
[*,[font=宋体,需要重新 Cmake' w5 _1 a; A ~5 D
[*,[font=宋体,编译好代码后打开ZSDome2 O' v; w; w- U* C5 g" b
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下1 s+ [, u% x- S+ A2 _; s, u7 W' W
[*,[font=宋体,然后直接直接运行即可.5 F: e" t0 X% g8 ^
[*,
6 ?" \$ g- S( Q: U, I8 m[*,对应接口
9 |0 {3 a0 Z) y4 `' w[*,Android
$ ]' n9 F+ h2 _8 ?1 U' P% S[*,DemoInit----[font=宋体,初始化引擎9 K3 V+ J/ N/ P2 [
[*,Render----[font=宋体,渲染主逻辑
9 z }% w) k7 t[*,
0 S% v6 d9 _! [ R% C, {[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
" j2 o% s" N8 V[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
8 t% c* ~: Y% n[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
! o3 y+ R$ Y# c7 `2 ][*,
6 ^& k& e# t: K g& r[*,然后使用:
* ^* w v: O- a3 P0 K: A$ Y[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
. {5 d" u* g% N! |9 K[/list, [/td][/tr]2 l2 u1 Z" K0 B; Z; d
[/table]
9 K; j# K' Q5 T: G9 w; v5 g$ U# E2 H+ J- n4 H5 S2 F0 R
7 s. J. w) T! L% r/ ^& w0 e3 p
|