[table=98%,8 u; t7 G8 `! p# K( ^2 k y
[tr][td]
- c1 ?: X, R2 F" Z% W# x
6 Y# V. R$ ]* g1 E4 c[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
2 l K1 U/ O2 @4 C$ h% P[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
" z. J# F! M( v( e0 W7 S, e1 z2 T[*,
2 J6 z. S0 v* n- {4 P8 w |2 c[*,多点触控:
8 Z3 h+ N1 z- ~5 b: g. u[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
; t* h- D& e) `2 y7 x7 A: c: n[*,原理:! `& P1 V2 v. G: c, f( w
[*,Int pointCount = event.getPointerCount();
, a* X9 ^- Q- w+ ~+ F[*,获取当前的点击个数。
: d6 H/ M1 S% @& N# i8 J[*,ACTION_POINTER_1_DOWN+ ]! ` s0 y- L8 Q e8 f
[*,ACTION_POINTER_2_DOWN3 |8 F/ n3 m4 H6 b* v1 F, u* |
[*,ACTION_POINTER_3_DOWN
% K! F& ], R. Y6 j5 x" ^[*,ACTION_POINTER_1_UP
- ~9 {4 r) c8 d& R0 S) e[*,ACTION_POINTER_2_UP# D2 G# b# f% O! Y0 v
[*,ACTION_POINTER_3_UP
1 X* ^3 j" U! z4 G7 S[*,ACTION_POINTER_1_MOVE
+ m* F! {3 ^* ?/ R* c5 A% k C[*,ACTION_POINTER_2_MOVE
( @" W4 m' X e2 T, j[*,ACTION_POINTER_3_MOVE
) r3 S9 O' a. o8 d- _: ^9 A[*,[font=宋体,获取各个点的事件响应
* v. w. {/ Y& ]3 t: {[*,
# } b# r* q! D9 @, L5 Z, M( N[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。0 R+ } T1 `8 K! O( b9 H, S4 O* \/ A
[*,[font=宋体,同理第二点也一样。
3 b: J' s& o* Y[*,
, G( z$ v4 H g8 I, h# ]" }[*,2:[font=宋体,安卓生命周期) l, D$ C- M5 y& g! c) ^
[*,[font=宋体,默认的安卓生命周期为点击应用图标5 K5 \- |. _( t: l
[*,OnCreat OnStart OnResume/ X/ K1 e! G6 v: l* x$ K
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
* T) E$ X" L2 K& t M2 t- B/ E[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
( K0 Z1 }! j8 R/ q) Q9 d[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
8 `+ Y. y1 k5 Z/ _[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
; `8 b6 J* e, A& j# w! E[*,[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,就可以了不要让他走周期流程. s2 u2 j, J6 y7 a$ g$ t; N
[*,/ a. A* D5 c7 q# M) M
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
* n$ r9 z% N( b5 ]; L[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
7 @) w6 u; i: {( I! a+ C/ h[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
) \$ \+ j' H. k8 q( t6 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,.
% }+ v) l5 s/ T; x9 s[*,
0 ^% j$ E! E+ f7 a0 V/ 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,具体写法
& |. |4 X- k, U. G) J% \0 A# l[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加6 z S+ p) Z0 M
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,% b; k7 d5 p7 J/ P3 Y ]/ g
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,, | }" E: x9 C: ^
[*,android:screenOrientation=[i,"landscape"[/i,>8 d) |, B( r4 Q5 a2 m3 @
[*,; g3 w4 W# I) J6 W7 j4 Y
[*,' @: y- K M1 @ H; t/ W7 X* D( q
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限# A1 G/ F/ p5 U$ q( p9 k
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类5 e, B8 W6 ^5 B& T# b& |3 K
[*,6 v8 [. f) \* c5 _
[*,读权限
7 G! |; S, b$ v+ U) z# O7 c[*,
! W$ I7 ]9 Y$ ^9 ?# t# I: j7 w[*,, F& F; C4 F H( F) r* p; n7 s% u
[*,写权限
" z; M* T" q3 r" s2 o7 y9 T[*,
! E" `6 p) q- Q0 c9 b[*,0 M& e) q( E2 d# s
[*,电话接收以及监听权限
& h9 c0 V& u$ X* v% f" P[*,; O% c. e6 \' u% [0 t/ w& [
[*,
4 @$ J: Z% ~' S8 d- O. c[*,短信接收以及监听权限
; ?6 ?* n! ~- F( T1 R0 n ?[*,7 c5 ^9 L! @2 k) a* q/ B
[*,
& |3 ~. ], |. M3 p[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
3 a' z; U" V) H& V8 v[*,: b0 b% o$ _7 }' \* F
[*,4 I) a; R6 f! b6 ]
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
+ K' \2 E4 e5 L$ ~. N1 B. q[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.6 F9 J/ J& m' K0 S/ w8 q, d9 ]- N! R
[*,[font=宋体,所以需要这种方式.
7 P1 a- `+ f( }6 _' A[*,[font=宋体,在JAVA[font=宋体,中自定一个类
- `7 q: p6 { L& d% t[*,Class MyData- E* F" L3 f' p! M
[*,{
9 K* Q' C& q% v5 S7 l6 ~[*,Public: ]' V4 l! M8 E6 c
[*,Int a;# _) B0 `9 n; n! ^; |
[*,Int b;/ E4 {* B7 l3 S
[*,Int c;
4 w' U) }/ G: g/ Y- [7 W: W[*,……..};
2 Z( l$ g8 c+ W8 K- V3 J- }[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明" P; V& T& z/ E( v5 V
[*,public static native void GetData (MyData data);
- ~: l( k( t, f( R* v1 h) z[*,JNI[font=宋体,层中声明* Y3 _+ i0 o, J8 P) A% Y5 }
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
! [6 x6 a. v: h0 L2 @[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
, q/ n G2 i- X" {( {[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
, q8 e' f7 _2 Y U7 b* S[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值+ C, ^* p1 r9 p0 Y/ M
[*,env->SetIntField(m_pdata, “a”, 5);
. x/ ]2 d0 ] T[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
9 w8 x% m, L- F7 i" c6 I[*,
# G8 i/ k9 z! N6 R, W* m/ |- f[*,
8 {5 s. D( A" T- c3 x) a1 U[*,6:[font=宋体,工程搭建
. M6 ~4 \# S! f# ?' [8 R[*,[font=宋体,首先编译引擎代码.5 Y- i8 s# B9 `9 D+ y
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
3 g/ [5 V6 T% X; g7 z[*,[font=宋体,需要重新 Cmake
0 e3 B. B7 G9 ~: K; H0 s[*,[font=宋体,编译好代码后打开ZSDome! t R" L: a. ~* f5 i) G$ O2 }
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下; T1 e. u4 X8 @2 G! y) Y" ~ B4 L
[*,[font=宋体,然后直接直接运行即可.3 A, f2 S4 J, [: c" M [ s2 P- x
[*,+ m& U# |- w3 T# u( m
[*,对应接口
- K4 K. A/ U& L( t: @ @. C2 d[*,Android7 v4 A* U- _" a. T9 q ?+ W
[*,DemoInit----[font=宋体,初始化引擎
$ I w. |* i( d[*,Render----[font=宋体,渲染主逻辑
4 T/ p. Z" H. M- R[*,% ^, Z: w6 E- H( s
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用" K2 k0 ?/ |( e4 e, U7 T: B9 a
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
' G7 T, c9 o& Y[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
- ]* C H& y+ M2 r[*," g: }8 C+ t5 ]. y% u4 S
[*,然后使用:# r4 Q; ^: o4 K! `, I
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
- X! m: o. b% c7 P* X1 x( u5 x[/list, [/td][/tr]' ^# Z7 ?: W' b: g% I/ ` r
[/table]
( T7 J- K: ?0 }* f7 P) |0 g" d* M
- z! ~5 s- Q0 ~
G0 I/ S9 n, x4 z" C$ N# { |