|
[table=98%,
' R5 [8 }; q. g[tr][td]+ Q* n- x/ y- A" e4 I0 Q
1 X7 T7 S9 J/ M* S6 M- n0 ^[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,0 {. ~1 E5 O: b$ k8 i3 S
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
$ \, i" x/ c" k- O, p( t[*,
9 T" M h6 X, |; c[*,多点触控:
: [4 f- p) x0 {[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。* m$ u0 l6 X# l1 B7 t
[*,原理:5 u7 y2 v4 s2 H( P# k
[*,Int pointCount = event.getPointerCount();
3 a: l) {9 E$ D- n, T- V1 Q[*,获取当前的点击个数。
3 Q, \. l6 A$ g- q[*,ACTION_POINTER_1_DOWN
8 ], F" w& o1 v# Q[*,ACTION_POINTER_2_DOWN
# `* [" Q( e* W0 u/ x5 @6 ]/ M[*,ACTION_POINTER_3_DOWN
- d" R! F9 O+ Q8 Z, \& a[*,ACTION_POINTER_1_UP% }4 y+ P- y2 L
[*,ACTION_POINTER_2_UP; y/ r# d% ~' C$ F- l, n* l
[*,ACTION_POINTER_3_UP8 E8 k6 b6 Y1 a! F8 W5 c
[*,ACTION_POINTER_1_MOVE
5 m U \+ n# D6 N* \% R2 a[*,ACTION_POINTER_2_MOVE
8 x2 K) i+ W# ][*,ACTION_POINTER_3_MOVE, K. ~2 O+ r7 [) ~
[*,[font=宋体,获取各个点的事件响应
! s6 C( o! B2 X$ H[*,
) }5 @" E0 [; ]0 @+ L0 `( ?8 M[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
8 u0 u9 X4 g+ Y[*,[font=宋体,同理第二点也一样。
; P2 ~+ Q* h* z- L[*,* b6 o* P/ q8 C: c% d- ^# b; b
[*,2:[font=宋体,安卓生命周期
& T6 w9 @$ x* p( i0 ~& K* I* ^[*,[font=宋体,默认的安卓生命周期为点击应用图标8 Q* `6 a8 H; ?
[*,OnCreat OnStart OnResume& n- B4 g, z7 G9 o2 @
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
5 n3 ]3 m* Q/ k, r# v[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.; W4 G: i. `* U' m, t
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
) D* q; t2 D" G6 `[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;6 M5 k- H9 f0 w8 F. @) t* Q) B- q
[*,[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,就可以了不要让他走周期流程9 r! C. ~) ~' L( o2 n5 |6 x% {
[*,
8 h; ~ f4 h$ c" s[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏0 r3 U& F% M U9 y" J
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.+ d7 [. ?. G7 j' a
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.8 a) l- M" L+ a
[*,[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,.
! @# Q2 y7 ?. I" e9 W[*,
9 g* B1 S4 p* l: }2 `[*,[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,具体写法9 R: F& {9 c: G9 w6 d: }
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加' Y9 y! P0 N/ L+ O5 i+ l Q; g- }
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
3 l/ f- ?; s& u0 W[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
- e2 t2 `# ]0 m+ Y[*,android:screenOrientation=[i,"landscape"[/i,>
0 |0 t* [. l6 Q" j m) x% l[*,+ c7 k# a7 | P' t: t) \- w2 D
[*,$ c/ f# g2 e0 C" y3 _
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限5 w, Q2 F' B% c; o* \
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
; J6 y" W& b, v4 u! S' P; I[*,
6 J9 } y7 }7 S, a[*,读权限# M) C$ Y6 ^/ H: |$ O
[*,$ ^6 _ d$ B; I2 J# _. K' ^
[*,( V8 g$ I: M) D* R
[*,写权限& ^: \, R* ]) W# H
[*,9 [9 n4 B& h9 `6 B Y% }! _8 U
[*,
) ^2 M* y7 E2 e1 A8 Z; |[*,电话接收以及监听权限' ~4 _5 l; j8 ?9 R* n; f" T* D
[*, i+ ~1 ^, }/ V
[*,: i2 m; W* F$ G3 s
[*,短信接收以及监听权限
6 q4 H9 \5 M; F8 [' n6 R1 u( r5 P[*,
( H0 t2 v) {6 b2 K[*,
( X8 O$ [1 s9 k h7 f/ p# K5 {1 R[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页% X1 f7 @: O9 o- w! p
[*,
7 R) a3 K6 I$ a: H1 q3 z) O[*,
% ]. r) o1 }* B& T[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互 w' V4 Q- f0 Y. F' O8 _
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
2 |6 N$ M0 ~2 `' Y[*,[font=宋体,所以需要这种方式.
" W" F& r' Z; `5 P7 i; L[*,[font=宋体,在JAVA[font=宋体,中自定一个类8 x; c3 k/ N( ~% R+ j1 Q
[*,Class MyData1 d9 X- X9 E- @3 H8 J. b# ?
[*,{
8 B# L& A. h" f[*,Public:8 E. Y. C# L3 N% U8 W; V
[*,Int a;
6 W7 J. K5 R9 D' u U p[*,Int b;
/ }+ M$ g; g1 m) s; N3 n0 K! B+ S[*,Int c;
1 g' w; O9 q2 l' R. ]7 e) t% \[*,……..};
3 G8 w& E; b' j/ l: t. ]' S0 o& @[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
& }- @& m: W/ ]3 n[*,public static native void GetData (MyData data);
/ X+ U* C% e" i$ O. p$ X5 f- H[*,JNI[font=宋体,层中声明) Q% k( _+ |7 A; g& A
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)" s8 V/ s7 M: d+ H& c" ]
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
; o. ?8 k3 n$ @$ y[*,jfieldID sound = env->GetFieldID(cls, "a", "I");3 f0 V" v' i! U. | V4 L
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
3 I5 T/ E. @$ o. w[*,env->SetIntField(m_pdata, “a”, 5);
j6 l+ B: r$ v% [8 T$ o[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.$ E5 O$ g3 H6 Y1 M) o. W; E
[*,8 z; b5 \$ ~7 D2 Y- p! s( j
[*,, ~$ g, y1 U, L! T: \! q; P9 [( l f
[*,6:[font=宋体,工程搭建
+ M8 u& d8 r; l0 g1 r[*,[font=宋体,首先编译引擎代码.3 g9 M M! B. ?4 q9 n
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
7 A9 r' T! \* T/ o! Y[*,[font=宋体,需要重新 Cmake
: T1 I2 ~- Z: Z+ K# k[*,[font=宋体,编译好代码后打开ZSDome
! D% f$ `. M+ W" f8 b0 n& t[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下0 A' Z1 M: O# E- {
[*,[font=宋体,然后直接直接运行即可.9 ^8 b( f% ^5 n8 _0 I! d( G9 T$ {
[*,- p8 Q6 P& e; D5 S, @
[*,对应接口3 U+ G: C0 U c+ i( d$ ]
[*,Android# e8 Y) s7 g6 N+ n: j
[*,DemoInit----[font=宋体,初始化引擎# }" F& t, x c0 q9 W0 R5 m( v) Y
[*,Render----[font=宋体,渲染主逻辑/ \% @1 F, `& A% y
[*, l' w( ~1 N7 I ^
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用7 f) w& ?1 H4 p6 g1 _9 E: N
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib* V2 b0 Q. `7 D' o8 J
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
1 N5 \ i! U6 w8 t0 a6 L0 ~[*,
: h7 m y% h- o( ^2 H$ ^( z& G[*,然后使用:
0 `5 p, n' ?% ?% m' f% [" X[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()2 m! D- v5 k0 q4 z" {
[/list, [/td][/tr]6 @ l+ _; _ Q/ l/ q
[/table]+ ^" |+ E% U( S
- Y1 L6 C; ?( C, [
, P& Y+ V# W8 u# b% t0 @" @! c |