|
[table=98%,
; p5 r: G I# X; c/ G, q[tr][td]
( K$ y1 d A% p
4 F& _9 L, U0 d* B9 h' v+ @[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,: K5 k/ I/ @5 X$ C0 j
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
4 k& `, s( I1 a[*,
. B0 n c9 ?( Z[*,多点触控:0 `# E2 Q' j3 z A, s& f
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。# _1 M2 {" F$ B$ u" \6 o
[*,原理:6 P% e5 Z8 |) E
[*,Int pointCount = event.getPointerCount();" H" z- m% a8 w
[*,获取当前的点击个数。
" \* Q8 u+ H8 p0 t0 x0 y: {3 y0 B[*,ACTION_POINTER_1_DOWN
: x: }5 A8 D0 k( b+ l0 }[*,ACTION_POINTER_2_DOWN# l7 G$ u. w9 u! a
[*,ACTION_POINTER_3_DOWN
1 s; [! M1 [9 s) V[*,ACTION_POINTER_1_UP
; A; `2 A* {) u[*,ACTION_POINTER_2_UP
. R8 f/ ]* ^( H) M/ k* }: P[*,ACTION_POINTER_3_UP
# a: Z* C9 i, Q5 L- O2 t9 b6 E[*,ACTION_POINTER_1_MOVE
m# r2 F8 v: H: f[*,ACTION_POINTER_2_MOVE7 u" T* R7 o6 \7 K) W/ Y& T: z
[*,ACTION_POINTER_3_MOVE0 |. ?0 u7 L$ o' ~2 X( }
[*,[font=宋体,获取各个点的事件响应
5 @5 U$ i& ]- B, V[*,% L# l) o1 D! w; R
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。 A/ @) ^4 E7 A0 n; n/ ?9 N
[*,[font=宋体,同理第二点也一样。
# O! e7 d' b' t7 D: T) Y2 d[*,
) y8 w5 z% s4 J, i7 H3 G[*,2:[font=宋体,安卓生命周期
7 e' x, T6 D; | Y; j. F- {[*,[font=宋体,默认的安卓生命周期为点击应用图标
" Y% x3 F" f0 ?4 k: ][*,OnCreat OnStart OnResume8 w+ i/ C' }9 E
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
4 q' {1 `9 l1 K9 G[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
* [% q0 \2 ?: n7 i[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
+ \: f+ c" ]# N[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;/ m C5 g' w: j: Z0 z2 p! Z
[*,[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,就可以了不要让他走周期流程
- s% b0 i! T' x6 z* V) u$ I& ?[*,6 h, r7 _! T0 M, A
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
6 S+ H* c' y2 A, n4 G[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
9 E' }0 d3 o1 q[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.5 g1 L. E! A6 V; B& T, b3 B! W
[*,[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,.1 |% m& N/ d |# c B
[*,
8 t! K2 A0 Z+ R7 d+ v" L8 F# z[*,[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,具体写法
8 H7 P0 ~4 j6 d/ h5 {[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加 {0 t: e! G$ N7 d
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,0 d g" O' C4 l8 L2 w# N
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,- I6 @; |2 n* |; i# M
[*,android:screenOrientation=[i,"landscape"[/i,>" e0 p0 ?* \( _, L6 M' v
[*,1 y4 m) L! `9 m. J; w( y
[*,
O3 e0 A+ i, ?( c( h[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
: f9 f& j- B5 K: y* X, j# G[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类) g% k. U. z9 q* m; Y
[*,6 B4 O/ P6 q" p' X$ V
[*,读权限: w) Y! g1 K$ o# j8 y! E
[*,. _7 a6 I1 b3 d
[*,
9 P% g6 m% Q+ J# s0 `9 V[*,写权限7 Q, `' B4 I, M7 l" y
[*,
8 O* \# o/ h, K[*,/ j$ b: T0 Q! O( z1 f& B% O
[*,电话接收以及监听权限" w8 M9 l0 R s. P6 c) k
[*,
' S& R+ v2 E& J" h[*,% ~1 w" Z* F, r5 Z4 g
[*,短信接收以及监听权限
6 R9 ]8 y2 X4 K% l% h[*,
6 I. o1 h, A9 x2 N5 k) I8 o[*,
- E/ O6 Q' j) o% Z2 g& u+ B[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页1 W- j/ R d4 Z C5 J8 a. N8 r7 V" X
[*,! h) r9 F: P+ d( _- @# i; M* o
[*,! [8 M7 J6 m7 Z6 Y8 I3 f
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
2 E# ]8 x2 c) q( | n1 D2 j% S[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.1 @: H I, j9 [; Z
[*,[font=宋体,所以需要这种方式.
1 u# O! h4 C/ e3 t[*,[font=宋体,在JAVA[font=宋体,中自定一个类7 T) V) n& O# {+ R+ Y0 M# H
[*,Class MyData1 H1 Z0 m9 I9 ?' F. g7 `
[*,{
8 ?( Z8 g0 @( W3 Q[*,Public:
5 ~" j8 r: D+ ^4 {- U[*,Int a;. r5 {3 n j$ W! |/ x3 X7 c
[*,Int b;$ b- j6 |/ `: @. J& ]% P# r
[*,Int c;* G; Y. o; M* }3 }& I. N
[*,……..};. q. h1 Y$ J; [, Z: {+ O& ?
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明% ]. X+ b9 \% P( `0 S4 H$ O! Q
[*,public static native void GetData (MyData data);
: @+ }$ C7 P, |0 [1 y$ u[*,JNI[font=宋体,层中声明
/ A$ L0 {( B3 T0 |5 B[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)8 L$ q' m/ M: I9 M
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
# S1 w6 \6 O$ p, |* m[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
0 o. N- o/ N8 h3 \/ J[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值( S2 X' G1 a" z" V/ z) g9 s, p
[*,env->SetIntField(m_pdata, “a”, 5);2 N* h4 l4 U: E- Y( f l
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
4 ]3 s3 g( L2 ~0 Z& ?: }[*,
* ^; h: [3 S. i7 p[*,
: U$ e7 d V6 D[*,6:[font=宋体,工程搭建1 B/ x! u. t; _
[*,[font=宋体,首先编译引擎代码.8 e! p% ] u! ]0 P n& c
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
- j1 U/ V% B$ X) F, P4 W+ q[*,[font=宋体,需要重新 Cmake" c p# a" h- u7 L. Y
[*,[font=宋体,编译好代码后打开ZSDome
8 d$ l" l, ?+ C' ?) E[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
' ?4 _* r7 Y' g G& r! F[*,[font=宋体,然后直接直接运行即可.8 h9 ]0 ?+ g; \8 T6 s1 W6 y
[*,
+ S1 Z+ P% k0 R' r5 L( F[*,对应接口' B5 H" f8 {9 j/ p
[*,Android
0 o7 V6 @5 d! n8 A5 F) f, l[*,DemoInit----[font=宋体,初始化引擎$ _2 {+ l" G$ j
[*,Render----[font=宋体,渲染主逻辑: x) {0 {& S S# J3 |4 ^
[*,
- Q, v6 d: T- I2 M8 z5 U5 Q[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用5 B/ L' `$ J) U% O
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
9 I0 p: [1 U% U) g5 n[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
+ x' ~" x1 _( k/ r2 K+ g; I- ^' E[*,
# Z3 O% `3 ]) p1 r4 l[*,然后使用:/ `0 F8 t _" q! P
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
* f, [+ j# U, m) h1 {[/list, [/td][/tr]
* L) \1 h) @& m; A[/table]3 ]! Q0 F' c7 o3 _/ |
4 K4 M) _$ |" p* i5 N9 d2 L+ \6 s) S
) k6 B$ Z& O; M. w: X* R
|