|
[table=98%,) E& C3 g5 R% U, Y/ u4 }
[tr][td] [0 Z1 S4 W+ o4 ~1 ]3 R
9 q4 l4 g8 L& u* V) }[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
% S% z" G* \) Z6 J! i9 t" T- c+ C/ C) u[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案! k' s8 Q' `) y( X5 L
[*,4 l0 i. W" h0 ~$ D9 C& T8 Q
[*,多点触控:: W& V- R! P; U+ T& b9 Y- c- F
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
: O$ x& }/ A' @7 Y3 `/ d2 I5 R[*,原理:
, \) A$ L) h3 p# Z9 R[*,Int pointCount = event.getPointerCount();
7 v: u! v7 e8 ~& P# z[*,获取当前的点击个数。
1 _5 @8 U0 }. X# {2 T$ o7 v6 Z[*,ACTION_POINTER_1_DOWN' ^9 b4 J' y4 @* m6 Z
[*,ACTION_POINTER_2_DOWN
# B/ I; n0 m0 J I[*,ACTION_POINTER_3_DOWN
5 Q2 Q2 o4 R; I6 ?6 b+ t[*,ACTION_POINTER_1_UP
' ]/ {1 Z i3 R1 h% T! j[*,ACTION_POINTER_2_UP+ ?! |6 _5 @2 [/ g9 x
[*,ACTION_POINTER_3_UP
5 k1 d% s8 r8 H[*,ACTION_POINTER_1_MOVE
' `1 z' U$ h: O: D$ r[*,ACTION_POINTER_2_MOVE- k/ l f" u6 K
[*,ACTION_POINTER_3_MOVE
- s. H, S% A& r$ r4 h[*,[font=宋体,获取各个点的事件响应
' X" I+ r3 w8 [, y) z[*,) o. ^% [& M- ^+ u0 R! v& v7 s
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。- r7 c" \6 Q: G5 r. L
[*,[font=宋体,同理第二点也一样。
: _- |: l4 h1 Z7 Y- j8 m[*,
% \( b& H! o0 N1 c[*,2:[font=宋体,安卓生命周期
+ r( V; y7 V6 ?4 w$ O; M[*,[font=宋体,默认的安卓生命周期为点击应用图标
) W% h1 I1 u- N[*,OnCreat OnStart OnResume
' Q9 {$ u1 l6 W, Y8 v, b: q[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
. K3 M4 A% N/ E' H; [[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,./ s- D8 P* O- n$ l; B4 t
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到& k2 I0 F7 ?: H0 i- Z; J5 b# t% N
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
& N2 s8 e9 k$ X3 D% n[*,[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,就可以了不要让他走周期流程! {/ k* p6 K+ |6 f- |
[*,* R# ~: S, i, _5 c: W5 Y! E& e! R
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏: n, |7 R( ^+ Y7 Y
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
^7 l: p4 n" g[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.7 i+ a8 R! [) O9 `+ _/ T6 }9 K
[*,[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,.
% W4 \, z' Y3 s[*,0 o5 d, V( d9 c7 Q: t4 r; k
[*,[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,具体写法
7 Y( O: M) ~5 i[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加1 `+ z7 X! \. z3 n
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
$ I! c0 N5 g& X* o7 R+ y[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,( m/ P C a# ~6 _* {0 d9 l
[*,android:screenOrientation=[i,"landscape"[/i,>1 `* I. n7 `* e. P7 A1 M
[*,
+ n& m. ~" r" i" d5 d: h8 Q[*,
8 n/ T1 \. u$ o! F e[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限 a% r. L/ P; i) L: b3 b, a
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类2 G L0 W' e! s, z8 p q: ~' P
[*,
4 q) A4 Z/ [1 B# [7 V2 a9 I[*,读权限
& d- v- U0 ?- ?- u[*,* d$ d9 F7 e0 G) V$ G
[*,
% T X% B" L I9 B' S, `[*,写权限- D; J6 v7 n5 \5 Y5 F; J
[*,1 U6 O: G3 p2 u4 B1 p
[*,3 x( n9 p1 A$ K
[*,电话接收以及监听权限
7 A' l6 d0 M8 R& o$ w0 ^* D1 Z[*,) R; ]: N9 l$ A- O: S
[*,. l% K' U' B% e( g) g
[*,短信接收以及监听权限 x, P8 R7 G: q( d/ ~- `' L Z
[*,2 L3 Y7 e8 p& Y \- U$ f/ a
[*,4 n7 w4 g5 `+ P" n0 i' i& F6 [
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
( d9 E3 ]2 V3 E8 I3 w1 v$ z! V[*,
. I0 ~0 }" W6 n! O( i, n3 v6 D" {[*,
7 S# s/ D# @' l8 b, o, {/ M7 [[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
0 H, O; ]3 y# d1 \% p5 _" B" k# S# F[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,., ]8 T; t* y9 X1 C" y8 A W0 |. m! d
[*,[font=宋体,所以需要这种方式.
v' S8 A7 b% U5 M, M[*,[font=宋体,在JAVA[font=宋体,中自定一个类" x) q& Z/ _6 x4 H; c0 k* V o" f- W
[*,Class MyData0 Q$ ^8 ^6 f; X, `/ ~& f
[*,{
3 Z- h* r9 v4 M8 w9 x5 }[*,Public:
( ?2 q8 x' a2 j$ I+ q) q4 j[*,Int a;0 }0 j0 t* O. x6 z
[*,Int b;' g- L/ t6 l9 E9 `
[*,Int c;
0 P5 T: J0 H8 [7 P {5 j: A+ J, B' Y[*,……..};5 X6 \ U& L1 r# m5 o( x* v
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明' B7 L% ~3 L8 [8 s
[*,public static native void GetData (MyData data);
7 w$ L! M- g* e6 x3 y$ G6 u8 V$ }* B[*,JNI[font=宋体,层中声明
2 p4 K- s3 Y. K[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)/ {, L- G& T: ^& N% g" `2 X4 O
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值7 j& }$ w0 q) j; s5 l3 H3 t3 f
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");& k- R+ Y. |6 v2 l% k
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值" l1 k- Z3 v0 g8 x) ?
[*,env->SetIntField(m_pdata, “a”, 5);
! ~4 Z" [: R, W- ~, z. W[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.. H9 u2 k& j& w# f2 d
[*,
B) A7 o% K/ |( _* h$ O' ][*, ?: d8 @& M) g' A3 k
[*,6:[font=宋体,工程搭建" u( p3 L" x* W1 o! ?5 p! t
[*,[font=宋体,首先编译引擎代码.% O3 A4 `! K1 i2 j* i
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
6 N' A _9 A- _0 H+ W) V. k[*,[font=宋体,需要重新 Cmake
v) N! N5 ~4 k" j[*,[font=宋体,编译好代码后打开ZSDome
4 }. ^1 P6 ]% ]; ?[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
* r, J: f7 `$ W' {" J* b[*,[font=宋体,然后直接直接运行即可.& y) w$ L, d% {6 a1 H, k
[*,, T4 Z2 Y- R0 \' j
[*,对应接口+ G4 j0 ^; O- n9 l) W) {8 {) d( {
[*,Android3 g) M. n2 B8 N( ^7 @" x
[*,DemoInit----[font=宋体,初始化引擎
$ o7 X( p7 ]1 W- i2 S8 ?[*,Render----[font=宋体,渲染主逻辑& ?4 q7 u3 s3 i
[*,9 T: m4 q, z; S- U5 w6 Y
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
% T5 u, h. d* u6 p. W; r( B: L[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
: W0 T. d6 W( d, N, U2 _9 r[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
" [4 Z1 U- z/ Y; v; V* P[*,
2 T3 r( M1 }# P[*,然后使用:
$ T! \ o Y, f/ t3 [- k4 ][*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()9 L$ |! a. Z" S# I! e! }; j
[/list, [/td][/tr]* s2 P" V/ g8 N6 ] k- |" L% c
[/table]* S; C- o$ o, l; Y! {. P u
% P! c4 S4 k7 B4 [, o( @
6 V6 t3 F I9 O |