[color=#939ead,[list,
" ]) f' _ v6 y' Q$ A3 t[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案' Q, Y+ K* a# c
[*,/ D8 n9 l9 j9 u; u" W/ A
[*,多点触控:
4 T0 j( U) |- l[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
$ [+ G' o( c& y; X6 _[*,原理:
0 V+ l' e& D$ O# G# {[*,Int pointCount = event.getPointerCount();
) `" M B7 |+ S" Q1 b% G+ _& o[*,获取当前的点击个数。; v# G0 [& w! @& ]5 t
[*,ACTION_POINTER_1_DOWN
0 M9 l$ K p7 C+ s# u/ l' G, s[*,ACTION_POINTER_2_DOWN2 r# L% q; u5 n4 J( A+ y6 r
[*,ACTION_POINTER_3_DOWN
- ~. C, ]- Q. {- a! M; s[*,ACTION_POINTER_1_UP
' @. |% l3 B4 A y1 I[*,ACTION_POINTER_2_UP* w$ }* B6 z6 P3 j; D+ b
[*,ACTION_POINTER_3_UP' \% z3 S4 d5 d# e! @
[*,ACTION_POINTER_1_MOVE- e; `0 |- ^# r, T; ?% k
[*,ACTION_POINTER_2_MOVE
& ~3 b- z& G+ S4 w: B[*,ACTION_POINTER_3_MOVE
& l/ t4 M) G/ S[*,[font=宋体,获取各个点的事件响应, p, ]8 y( h; {
[*,
$ Z: O" W. H+ L8 l[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。% b* y s, |0 t4 l3 Z. A
[*,[font=宋体,同理第二点也一样。
7 i6 U5 [; `$ F4 u) C( }1 E, {3 W[*,
/ v, k2 }! R; F; m/ k[*,2:[font=宋体,安卓生命周期
* b% [* p' V C) r) m[*,[font=宋体,默认的安卓生命周期为点击应用图标: W1 o) Z/ f: y* R+ V" Z; |2 Q
[*,OnCreat OnStart OnResume( F+ L9 d. e! M) i
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
1 m8 p, w6 d8 z* a& r2 A5 C[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.6 S) _# H/ L( e+ _ h i- s
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
$ {6 K2 k% L8 ^1 U \3 f0 T. H( Y[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;8 @4 b, L, L6 w% l3 k. f5 ?- o" ]; B
[*,[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 b7 v: x! A( C! x5 l9 j4 D
[*,3 w5 t' e- Z" Q* H1 H: |
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
8 y4 |! e3 y; P1 T" ~. u5 y[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
) f' o! z$ h. e# `8 U+ W[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的." @6 p- o/ L1 p7 Q
[*,[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,.6 g' z* k% l9 r
[*,
$ e. s5 K4 Y$ x% [4 U5 S, g[*,[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,具体写法
! j7 E3 q9 m# Y[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加- y& \' Y2 d+ A8 e; S$ j
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
3 \& `2 i$ H" L3 M. y J[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
2 l7 W l, f' B) q[*,android:screenOrientation=[i,"landscape"[/i,>
0 L" s' u0 |' k/ k4 S[*,
3 |: g' _0 }5 M g2 v; F[*,/ H8 ^5 R$ L& V# h5 s
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
) l7 l' T, q/ f" E% l" K; y, b% ~[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
; {" W& o1 r! I V* ^[*,
& [$ Q. A1 h0 d' y[*,读权限* B5 x6 W% w7 G( M8 I% `
[*,( p+ f& ~3 }, `
[*,
0 B [$ F1 p0 f[*,写权限
& ^5 l6 @6 W n2 f: k4 {[*,
6 Y! v% q1 n H3 e+ R, y' J[*,6 f# _0 H( l+ |9 ^
[*,电话接收以及监听权限
8 X% d5 T/ C6 k: @- u[*,
' O3 Q. v7 Z7 @& ~$ ^# y8 T0 U+ B# G[*,/ Z1 J9 d6 w) q. a/ b9 m' Q" }! L+ U% x3 K
[*,短信接收以及监听权限
/ n5 L3 ^8 V- o3 l[*,
: N' ?" p0 M" K[*,- z8 c O; a( `9 x- \8 t
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
# a; w" \9 Q' o4 m# P6 k8 a1 {6 G[*,
; l3 l# i: ?9 l; }! p. H8 v[*,
/ o0 H. e. I _5 Z/ B. ^( D[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互! D2 s8 ~& `1 `* [
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
3 I' g0 u* `" N[*,[font=宋体,所以需要这种方式.
d2 Z5 E {9 [0 T' h7 q8 C3 W! Y, e[*,[font=宋体,在JAVA[font=宋体,中自定一个类
v t; y# e( j' @$ t[*,Class MyData5 }. i# @9 N5 l9 C. \+ W- [
[*,{* @9 @1 ?7 g( N2 Q
[*,Public:# G% h4 }. |' S1 ^
[*,Int a;
/ ~- {8 Z2 v8 t Y- u[*,Int b;
! s8 S! K+ z/ M[*,Int c;: r) p. H+ J8 R# E
[*,……..};
- M+ }" ~8 n2 z[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明6 o( `; m) C' _) }/ ]
[*,public static native void GetData (MyData data);
3 N! j0 Y6 M) w[*,JNI[font=宋体,层中声明
: k* t5 ^: M7 j* E5 Y* f[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
% w' v8 y! r* O" U5 _( n8 e8 {[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
9 u4 h- |# k' t9 X1 Q# x[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
. _2 o7 Q9 q3 T3 K7 C6 f3 e4 o[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值, Z* A! p+ T6 `
[*,env->SetIntField(m_pdata, “a”, 5);
9 D5 ?% W+ u, @* H# j0 Q[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
; E; w5 z& F, Z8 w/ |% A[*,( B8 {0 O$ Z$ N" l# G5 ^
[*,
, W* s7 j. ?0 V s# h[*,6:[font=宋体,工程搭建
3 r: }# h0 G. B[*,[font=宋体,首先编译引擎代码.3 G$ b. o2 f$ ]; r
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
1 J6 l8 W7 t/ O; o[*,[font=宋体,需要重新 Cmake% c9 \* `& A' }
[*,[font=宋体,编译好代码后打开ZSDome
! F* S, e$ a3 ]4 |, c9 @# {[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下2 L# Y& _6 t I( S
[*,[font=宋体,然后直接直接运行即可.
5 \# [5 S& i9 C4 A- _[*,
1 ]; }* g5 _. F5 Q+ T[*,对应接口
9 u7 D- w! Q/ T/ ^( s6 T$ i[*,Android
3 p" G, {4 g, }) V6 p7 y+ Y[*,DemoInit----[font=宋体,初始化引擎
2 q" K- c( y* H' L, o2 @+ X[*,Render----[font=宋体,渲染主逻辑' W: A! v: F4 X/ c- Z1 o
[*,' N I* k7 k* o) D6 t
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用3 l3 X- N. x& M) _6 B5 l0 ~
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib8 K! s* |" o$ [. ~# g3 Y5 D
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
8 ~5 i& p3 {5 z& t( o[*,- Y! ^! ~" F" R$ v1 x# q
[*,然后使用:
4 e/ l; Q4 A# @: N. L& n[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
6 e! k# ?! g1 r6 A2 q+ L8 g[/list,
[/td][/tr]