|
[table=98%,
' y/ H8 C3 n% r, D[tr][td] Y- ^* Y/ I8 ]0 p& D" c
! {, r6 s! J# z[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,) \9 q: N& o0 E4 c/ N& x3 j4 g
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案' _. ?( b; Z2 G5 C$ V9 U, E5 ^
[*,
; t9 x/ c" Z7 K/ q# [' s. o" t[*,多点触控:* U4 I$ ~' P* R6 l
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。; q5 O# q. @7 k; }, V, N- A
[*,原理:* M$ Y* c) q+ F0 T& d! b
[*,Int pointCount = event.getPointerCount();" I8 d8 ]7 y7 U# x8 a# i. L
[*,获取当前的点击个数。
. W6 `+ I8 q- C( L1 u. m[*,ACTION_POINTER_1_DOWN
/ y3 m0 ~3 s+ j+ r5 ][*,ACTION_POINTER_2_DOWN( s( b5 S2 G9 t) C5 d9 v2 O7 M3 J
[*,ACTION_POINTER_3_DOWN
2 {5 s1 K; I% {[*,ACTION_POINTER_1_UP
7 w8 t# i) H& t: i6 ?& A[*,ACTION_POINTER_2_UP
8 v! u! R" U/ q0 e7 p[*,ACTION_POINTER_3_UP/ @: _* q. j, N2 r! a# f W4 [3 q
[*,ACTION_POINTER_1_MOVE
7 |6 d- w# v$ F4 Y9 w' u- a3 F[*,ACTION_POINTER_2_MOVE. r( u4 O) a Y M; I
[*,ACTION_POINTER_3_MOVE4 E6 L1 x% ^) `( z
[*,[font=宋体,获取各个点的事件响应: o$ m7 J/ G* j6 u D6 Q) w7 \- r" j
[*,5 Y7 B g( l! Y; |. _
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
6 r: H2 c# E4 M, V) w' }1 ^' ~[*,[font=宋体,同理第二点也一样。
* s3 S% T' E1 j( P$ ][*,
3 w: D* n, A# g5 S5 x/ b[*,2:[font=宋体,安卓生命周期
6 o- U5 a- B' Q[*,[font=宋体,默认的安卓生命周期为点击应用图标" }# a, l# r, o. V- o8 e( M1 ~
[*,OnCreat OnStart OnResume/ w) e) t' ?7 k# v# m" r, I
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
5 N l& h: b+ y1 e& K1 x! |, D6 ^[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.1 @$ X i2 `$ w' E
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
1 F7 N; c6 s8 i. e& h" E: |! h8 \8 Z[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;8 I% _( D- Z: W+ K
[*,[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,就可以了不要让他走周期流程
6 O$ L! Y6 V! Y/ Q: \) A[*,
- b1 H. ~ W7 ^# ?3 g! f) ^! g6 f[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏) o0 \& O9 w" Y8 i
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
6 h) a* V6 F$ I[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
: g. u& m' E8 ]& w% e) |[*,[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 z% p6 z! R2 w4 i6 u4 G0 F9 r[*,
. q; I0 F! W, s+ {# C8 E[*,[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,具体写法. z: V& s. f( A' G5 d, x
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加! d [- y( ?* y8 f3 Q" [+ w
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
1 Q9 ?! I, @( Z& C% E& M[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i, s" V- x) |) Q' V& f+ T. \8 [: t
[*,android:screenOrientation=[i,"landscape"[/i,>
s0 Z/ }! }. c9 J" X/ a7 v& q- I[*,
& g( F. M7 w! S3 r4 s/ ~4 b[*,
9 ^' q2 U2 b8 b2 Y# {0 g* b[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限$ z3 Z: u0 P8 w% l9 G( P0 x
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类! u! a5 k* _ {3 ?
[*,
6 j9 h3 o9 U8 }. u- o[*,读权限
, R5 I$ t5 K, R) h3 }- |( [[*,
1 V! m `4 p2 J8 z[*,
) Q: C) U* |2 Q p8 H. U. K6 q[*,写权限5 [. z8 ]% ]2 |5 U% Y0 s8 T
[*,
$ @" F. J) v- F# g8 ^, z0 R3 R. b[*,# q$ {) Z2 ^/ d w$ l
[*,电话接收以及监听权限
$ ]- R" ~$ b5 Y[*,
7 j- s7 T: p+ L[*,) P. |7 l9 o8 r, I. X0 r2 D7 {
[*,短信接收以及监听权限
( J- R7 x; k2 D/ D1 U[*,, S1 p8 A# _3 a
[*,
! `# d# w+ g8 q6 b' Y[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页 S3 r# K+ m, w
[*,5 M: |! n) m3 B L0 ]
[*,
" @8 U& J5 m6 u' f6 H( C4 ^[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
( u# ^+ G" d) H6 G& ? k. `2 ][*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.$ u) R: V: z( v4 Y: p
[*,[font=宋体,所以需要这种方式., i. T8 B; Z' \4 _
[*,[font=宋体,在JAVA[font=宋体,中自定一个类. s+ f$ n2 y1 ^' I7 t- q5 r) x
[*,Class MyData
7 j+ x1 _+ x3 o' ]1 c[*,{6 i& V* i3 `1 u; a( Y
[*,Public:
( y- Y( ?; e7 L/ d5 M, ?[*,Int a;3 _" ?3 x4 ]- g8 I+ Z4 `: Q* h) J
[*,Int b;
- \. p+ c0 u# ]; ?" M4 J[*,Int c;' i! F g& Y& C5 \% Q" x6 q
[*,……..};; ~; z R( X- l$ g+ y [# z
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
( x, f2 S% ]+ P[*,public static native void GetData (MyData data); M$ @! X8 ?' W' U8 a$ t3 \
[*,JNI[font=宋体,层中声明
; R1 j. Q% j+ K[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata), i; y5 l$ q4 P+ z; {& i, P$ a
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
$ l- K, m" g2 X- b- ^[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
% o5 }9 I' s7 {[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值. o- R" |# H( ]$ z$ S" `5 q8 ?; G. J
[*,env->SetIntField(m_pdata, “a”, 5);: I9 f k; F- W6 F/ w- J
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.9 H( O+ _0 k: l" P* J+ h5 \1 G. I
[*,3 H2 \; x# Z4 `0 O
[*,
5 b# _4 }" d4 b: G4 i[*,6:[font=宋体,工程搭建
2 m! R/ b; Y: V! O[*,[font=宋体,首先编译引擎代码.# x0 y3 {0 U, ^7 D# h2 [
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
& ^2 Z1 }$ A2 |" x[*,[font=宋体,需要重新 Cmake6 X) \ k) q- j1 n
[*,[font=宋体,编译好代码后打开ZSDome
# @4 R/ z N! Z0 \( i[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下$ n+ k6 f- w; t# G: H
[*,[font=宋体,然后直接直接运行即可./ @9 d, X1 H2 s A/ B, g
[*,% I3 q4 O* ?" C3 h v u7 m" z
[*,对应接口; }+ x+ ], H5 @6 x0 \: j8 t! P
[*,Android2 h. N3 _8 @; Y1 K* [* t
[*,DemoInit----[font=宋体,初始化引擎8 J! K. ^" }5 \' W) g$ Q
[*,Render----[font=宋体,渲染主逻辑, h- { L6 m. q+ F
[*,! U. Y) J8 M: }4 O3 \6 M2 u- X
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用/ ~$ x( n( n# g& G
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib/ l" y/ _2 B3 W: T: ~" U& T$ y8 U1 W5 A
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a3 S! k9 F' ?6 m" ]6 E
[*,
1 q! Y. L5 p* Y3 L' p[*,然后使用:6 F9 j2 U7 t, A. P( o% J e$ i) g
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()+ T5 P. `; K5 u% N* O* k( |8 ~+ ?
[/list, [/td][/tr]1 O/ O( \8 _/ f; s
[/table]
_ s9 I7 ?1 Q0 ~; N- M* [6 h6 t$ z3 z0 a# u; E7 T! n
+ u O$ o& }# `$ C* \ |