[color=#939ead,[list,
, t. V8 l( a' r[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
" k5 `6 `* @/ ~$ g, E4 ?2 v' c[*,
! I) q) P, M2 G& Q[*,多点触控:# ?# t3 S! b5 z) U1 q
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
* ~: t, p) w6 h' T[*,原理:1 V' ]) j# f9 }7 K) p0 V8 _: V
[*,Int pointCount = event.getPointerCount();' b* n2 n% P) J
[*,获取当前的点击个数。
7 M9 a: d5 M6 u# U4 R[*,ACTION_POINTER_1_DOWN# o4 o. i/ {: e/ H! h
[*,ACTION_POINTER_2_DOWN+ d7 | C- k$ b; g, s4 D# X
[*,ACTION_POINTER_3_DOWN+ H7 L9 T, [; F% ~- b# Y- P# A
[*,ACTION_POINTER_1_UP4 P* T. P! S* B2 `6 N5 d
[*,ACTION_POINTER_2_UP
m6 h! C. X& D" C9 l[*,ACTION_POINTER_3_UP
* K4 A( D% ?5 r! h( J; h: S[*,ACTION_POINTER_1_MOVE
" L! r* k8 v* t* c) |[*,ACTION_POINTER_2_MOVE8 c0 _, M, F. B1 J' X3 O: k# P; l
[*,ACTION_POINTER_3_MOVE* ^% ]6 A% d. ]1 C
[*,[font=宋体,获取各个点的事件响应4 t3 F$ h: F* }/ |% m: @% h
[*,' ?: p# \- M- ^( Z
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。3 K' b' u& n* j& Z! F
[*,[font=宋体,同理第二点也一样。
' S7 G# `- W6 }5 F% S! l[*,+ Y- g/ U4 d% @ S
[*,2:[font=宋体,安卓生命周期
" Z! ^, G* ~9 H[*,[font=宋体,默认的安卓生命周期为点击应用图标, @! ^4 h( N3 {5 p0 G
[*,OnCreat OnStart OnResume
" X, [7 O+ N9 R# }- ?/ r# E[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
* W' i: t* S( l9 m[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
* w( g. g0 b* G& W# @7 V[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到8 |0 l7 i, I5 W0 f
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory; }4 l& D: }0 ^' ~* q h
[*,[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,就可以了不要让他走周期流程+ [% {0 c4 r" y t7 U
[*,
" _4 E! U4 ?6 B, r* E# G; q! u/ g[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏; \ T9 e7 ^! {; @* s* A2 M& b
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
1 U; O) k, l) r" n% O3 N! V$ k[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
5 \; {! R; M- G[*,[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,.
' F, C8 X7 _ C5 b) I[*,
* D1 X" B3 L; w/ c0 V+ x[*,[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,具体写法
, a7 L9 j4 ]5 | B8 v d6 h[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
4 |% I3 r) f& d \ D[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,4 l' [; \! C2 D; c
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,& `/ Y$ F. |6 \; K2 p+ x+ _
[*,android:screenOrientation=[i,"landscape"[/i,>
3 U) s3 _- e% x8 {, A7 U- P8 w5 f[*,, _$ E2 x3 x" ~) v+ B
[*," s7 ]" t* R4 s
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
( v0 r; p0 F3 y$ ]1 W6 z- _9 m[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类% P( B# r3 Q0 v0 _3 n& h: D4 E
[*,
" @' P4 f; q6 q+ m( L% L$ e[*,读权限9 }( U, }( j' h0 d, @ s+ S( j/ L+ K
[*,
+ z/ |! z9 Q& T: N[*,, f$ M+ m( Q% J
[*,写权限* `7 A( J: m' i6 X2 h
[*,
5 ~4 a& {6 P/ q# S0 q- d9 N$ I! [[*,
" ]- f* L, M! Z, K$ K[*,电话接收以及监听权限; _5 x1 C' T1 b8 [ h3 q1 F
[*,
' ^' n3 {6 v: }' A' z) z; z[*,/ a# `2 Q) D: W0 j
[*,短信接收以及监听权限9 l+ j6 U% }& m7 i; ~+ u5 p- j: [
[*,
9 k( m% v4 e$ U3 Y) P" d[*,; ^2 f G W* ^- r; W/ k" R
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页: z" X7 r/ L; |. a" j$ t+ N. i1 G
[*,
/ X/ H% U8 m! c% |! I[*,# |4 i4 E1 x% f" U) h- x2 `
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互 Q) g0 `4 l* T1 v- _* w5 k5 l% U
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
1 B' P" A$ T6 [3 |" O' F2 r[*,[font=宋体,所以需要这种方式.3 g* G& _) T$ a/ I
[*,[font=宋体,在JAVA[font=宋体,中自定一个类+ v a' c: |6 e% U' I' z
[*,Class MyData, M2 X' {# R. y/ M
[*,{% N& M& j8 ^6 ?
[*,Public:
4 v N* ~( _" x/ h6 f6 G[*,Int a;4 N3 Z, ~3 l( D( k
[*,Int b;4 X7 t8 g* x* P6 V- [: h/ S: t7 v
[*,Int c;
4 B/ X+ B' c( I7 D+ Q[*,……..};
' O, y9 k% p) V+ h4 X. l' v" g[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明) k$ |6 X; v5 ~6 D2 t8 r
[*,public static native void GetData (MyData data);
, @5 B* E# ?6 W6 t1 o! }: f[*,JNI[font=宋体,层中声明
m2 {4 r6 i4 X5 u( o' o1 d! R[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
+ Z% c2 w7 Q8 ?# T6 z4 e5 v[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值4 s) m6 [* o% b0 w7 o \' d4 o
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");+ {1 u5 @/ g8 b
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
5 ?4 t; I* [# n6 S[*,env->SetIntField(m_pdata, “a”, 5);
: W6 A# _; k% N6 y[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
- E' |: W- ? S[*,6 C* h! ]! p; I( F2 y* B+ }
[*,
2 {+ X) t9 N. o' K u3 j6 q[*,6:[font=宋体,工程搭建
) t5 m1 Z9 f d n& e[*,[font=宋体,首先编译引擎代码.
- a& a g% G2 b4 _. }9 k) n[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.& e( N8 |( p# ^. @' g
[*,[font=宋体,需要重新 Cmake
. ]6 G6 F* ?: i4 d4 o[*,[font=宋体,编译好代码后打开ZSDome/ G) M$ w8 `. |6 O& j
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
6 L6 h6 U; f6 j) z[*,[font=宋体,然后直接直接运行即可.
) X- y: R4 T, B/ }% Q[*,
5 T+ s2 r# {+ s9 |. h[*,对应接口
; Q _5 U q) Y) G8 ?[*,Android3 q6 k+ a/ h! j9 J! t/ H' e
[*,DemoInit----[font=宋体,初始化引擎
, `4 T- g U1 C+ r5 f3 d[*,Render----[font=宋体,渲染主逻辑
2 F2 Z2 }- i+ | ~ }9 k* f[*,
1 m, n% b3 l7 c* \5 x7 V[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用 v( G. i- @4 @1 \& r% e/ O
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib7 k- F! O, O& C( b9 z, [
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a* D2 o O( ]# g& s6 F
[*,
$ T9 Q3 p$ P) ][*,然后使用:
; \% k! a b9 w* X# D6 n[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
7 w/ X1 `. d' v1 y* z[/list,
[/td][/tr]