|
[table=98%,
2 P8 r: D" B! d. X* _[tr][td]
/ A& \4 y0 x4 K. ? T$ _& N2 Y; v: L0 D' k% E4 ^
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,1 f3 ~2 o! C ]) {2 a/ @$ E
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
% z0 t& G t' K% k0 K& M# w[*,9 o8 }; y3 s6 L4 f: [& J, g# z
[*,多点触控:: |8 s3 ^2 }# Q, N% k6 Y
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
. Y3 C" y2 V! ^- D8 j[*,原理:6 d6 w; k. T9 w2 l, Q$ R
[*,Int pointCount = event.getPointerCount();
; x3 R$ Z1 q/ |4 w) I& m[*,获取当前的点击个数。
) y0 ?+ z% [: X% I [[*,ACTION_POINTER_1_DOWN" i' R0 J0 G& ~* v1 f7 q5 x; ]
[*,ACTION_POINTER_2_DOWN& M& q% l% G; F; M% [7 s
[*,ACTION_POINTER_3_DOWN
5 ~+ }' k) _# f; }[*,ACTION_POINTER_1_UP
+ D8 ^6 t! b d( u[*,ACTION_POINTER_2_UP
$ J5 j# y! Y# U4 o[*,ACTION_POINTER_3_UP
* W: ]+ K7 n" o[*,ACTION_POINTER_1_MOVE5 x9 i7 A7 y- a8 Q! Z" _' N: y
[*,ACTION_POINTER_2_MOVE
* F U2 D% z4 _) A[*,ACTION_POINTER_3_MOVE
9 x" `, ]0 D/ j5 G; A# p2 E. v[*,[font=宋体,获取各个点的事件响应
# V3 K3 E1 R( w) [8 _4 _[*,' j* j! Y G0 `
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。0 t; u2 o+ @0 n5 f
[*,[font=宋体,同理第二点也一样。 H# V. o* O Q; ?
[*,
% N6 a' T4 U; c9 |" u[*,2:[font=宋体,安卓生命周期; t# x# W# B2 W
[*,[font=宋体,默认的安卓生命周期为点击应用图标' T/ }9 q9 t y+ u
[*,OnCreat OnStart OnResume" I0 E: J& d' }4 T
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory, X3 `0 I( }- q/ k% b* v" u, Q
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.) c" A+ @8 D# E4 c
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
4 P1 P4 I1 y# o0 {) }# i1 a3 U# F[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;# k) e5 n) N9 ^7 o( ?+ M! E: B3 D
[*,[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,就可以了不要让他走周期流程
* N- H" o) E: B) Y ]* E: A' r[*,
- }: H' N# s. B[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏# a$ A( q! p h/ o
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
6 |" |7 Q7 z5 l[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
; I; i% N# s2 H3 d[*,[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,.
) x: Q6 |0 q. b; i% u[*,
# e0 q$ h5 {7 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,具体写法$ Z% h! L( x; [6 ~6 o
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加# t x d9 ?* q4 ^
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,! _, o! d: D, S! L E- H& W
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
! ^; V3 m4 d8 x5 g5 _6 L* K8 }[*,android:screenOrientation=[i,"landscape"[/i,>
. \/ G. h/ l! U% S l2 T[*,4 |' R( F* ^: l7 V4 h
[*,: ^. B+ I. V. b, Q+ p
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
$ O* ]/ \1 G$ a. S[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
/ [0 Y" |) u* f: T# u9 h2 U[*,; _! y2 t# Y$ L- J/ \2 ]
[*,读权限
: N+ [+ M0 H. F. O0 E[*,3 E& C4 v$ \" |6 u# a1 F4 i
[*,
2 j3 l Y6 k( V2 L[*,写权限
( r5 X& ] @1 \0 h3 b- k& [[*,4 o$ i- r% p9 ]
[*,9 _- v$ @% l, ^* }3 F
[*,电话接收以及监听权限
( R, n2 N& }& \# `" i- [[*,- y2 T) a/ ~5 U; U# G- J
[*,2 y8 V j4 V; e S1 O
[*,短信接收以及监听权限
8 f$ N, P- {, D- V. O[*,; P/ c( f, e+ s3 b0 N9 B, X# ~
[*,
( ~' f- o2 v! D& j' p6 U2 |[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
; K4 I1 l* r) r: S0 d" C2 K' W[*,
- V L% k1 d9 ^' A[*, X8 B- v3 x1 h0 [0 n `; s
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互8 z$ q9 d" s8 f6 _5 C# V
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
7 Q# X. K! `( K' T7 I! X[*,[font=宋体,所以需要这种方式.
}! i. z# x1 m[*,[font=宋体,在JAVA[font=宋体,中自定一个类
0 L) H- }: C* Y! ^[*,Class MyData: l# {* x+ a W( ^5 Z# `
[*,{
% J+ A' M0 X+ W3 P[*,Public:
, |1 z) s5 T5 B. Y# e[*,Int a;
4 W. r1 P r! G& X% G" h5 N[*,Int b;5 ^; ^( J3 L: ~5 U2 s# U0 ~* f
[*,Int c;6 z6 N4 O. y# H: R3 V
[*,……..};
' m, S4 ^6 @8 l- u& c. ~; U3 N& ?[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明0 w+ f& b! Z- E. ~" Q2 ?3 [2 e
[*,public static native void GetData (MyData data);/ B y: y# L9 A0 y
[*,JNI[font=宋体,层中声明
3 F- ~! _0 e* d3 q[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata) s! g1 e0 O ^8 `# v, q k4 s
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值" F. [" J2 ~/ W5 `% J6 j
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
1 C; P+ H9 L9 d$ B[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值- {" u$ V5 l- d
[*,env->SetIntField(m_pdata, “a”, 5);
. ^. i7 @% {1 b( u) j1 p/ t" q[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
$ H4 D* G- E: {[*,& m( h+ u( g9 A& ~5 |5 y* i7 F, C
[*,& G0 ]) p- V0 _( v) {' T% f
[*,6:[font=宋体,工程搭建
3 d S8 s1 s4 c3 S[*,[font=宋体,首先编译引擎代码.& o' t3 c9 B, E# e# s$ N
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
/ b% C/ D9 W1 ~# j[*,[font=宋体,需要重新 Cmake9 P3 A1 d; Y& X! I6 h9 D4 u# i- \
[*,[font=宋体,编译好代码后打开ZSDome
* H$ Q9 K9 J, r n9 o8 T/ X8 b[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下9 c) Y/ Y& D! ~, n/ f, T" s
[*,[font=宋体,然后直接直接运行即可.
* B" ?5 I0 X, Q. [! i, n& |1 C5 t[*,
7 |7 L9 |# }! `6 w; \+ O[*,对应接口
# Z8 d3 P+ B) ~% A6 t[*,Android
8 i/ a+ j/ C* k6 }' M[*,DemoInit----[font=宋体,初始化引擎( V% e8 O _, k$ t
[*,Render----[font=宋体,渲染主逻辑1 d7 @, u& }9 a# ~3 l
[*,7 ^% G, v3 e3 k9 K
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
& X: |. {8 [4 v8 C! \[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
- G1 ?) e7 G; |( X[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
% _+ g& {0 K% c! q- D5 s" s5 i$ i- j[*,
P2 A, r2 U3 x1 F" b[*,然后使用:
7 N T- t7 w8 H" k c$ l% h! I[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
6 [& E; J4 E0 `$ t* U[/list, [/td][/tr]
. l( E a9 L: j- J[/table]: E* b9 t, I% y+ M; k5 E
8 ^, A+ l$ N/ ^3 h
! ?! X1 L( J: H- Z$ T
|