|
[table=98%," d. J! P9 M1 Z+ m- L9 F; @
[tr][td]8 |1 y+ d4 F% Q2 _2 S3 d& ?* o/ c
5 P- s, D! J- f, K, U' U8 q$ G4 R
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
- h- v1 q) ]# E6 v# A% w[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案' O+ u5 b/ O2 f1 K( E% O
[*,
0 _$ Q* j& H/ w% L[*,多点触控:
) ^; H: q; i7 |1 b[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。) m1 ^% x0 f4 Y' O1 J
[*,原理:
- b: t2 C, J1 a7 v0 M, x; z. o" F* \[*,Int pointCount = event.getPointerCount();
& r$ z6 [8 |3 X: d6 B: Y[*,获取当前的点击个数。
' i1 H6 X) `2 k[*,ACTION_POINTER_1_DOWN1 z/ F9 I# ?$ w% e9 }2 e A
[*,ACTION_POINTER_2_DOWN
& J. B$ `, P! a0 [[*,ACTION_POINTER_3_DOWN
0 d1 k) x0 F, n5 ]6 {+ w4 E$ \[*,ACTION_POINTER_1_UP
1 L1 `3 ]5 q1 L7 B, g7 D: {$ n[*,ACTION_POINTER_2_UP& ?* p4 K' E$ r; J8 I# F
[*,ACTION_POINTER_3_UP4 r8 ]2 Q% l& _
[*,ACTION_POINTER_1_MOVE6 `& K7 C7 g6 H7 R5 c1 q( F
[*,ACTION_POINTER_2_MOVE3 E8 S5 y6 o+ [$ d
[*,ACTION_POINTER_3_MOVE* |# A) R+ d; U5 d! e9 P/ q5 O
[*,[font=宋体,获取各个点的事件响应$ t) x) A j& j
[*,- H% {$ N. C/ d8 B
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。& w; J( \$ c; u9 i9 L( z
[*,[font=宋体,同理第二点也一样。
+ g) U4 ^/ F: E+ P( J8 H0 `[*,5 {* D& w1 E- V
[*,2:[font=宋体,安卓生命周期9 ]; E% C: I4 W9 m+ C* o
[*,[font=宋体,默认的安卓生命周期为点击应用图标
' m# a$ Y% Y8 D- ]* A: E[*,OnCreat OnStart OnResume
4 _- C" B6 [6 A+ h+ S8 w[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory$ P, [. N% \2 G/ _% G
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.7 ]8 b. I* R. Q ]
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
4 G7 O% R: }5 j A[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
( n* c0 X! Q" p. ^# F[*,[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,就可以了不要让他走周期流程# G$ ~" x4 a8 H- {7 W3 u2 Z7 t
[*,( B1 I7 `1 W; y( c: k, i
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏+ b6 c& i+ Z# @2 u D+ Q4 m' H0 M
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.0 \) w1 R4 l5 f! Z
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
8 {+ n, c4 u A. b2 l$ g/ D5 D" A( U* 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,.8 A2 X) x6 T0 _0 h3 w
[*,( l5 X/ |% u( L c+ X& 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,具体写法
0 o! U5 e" |6 X[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加3 a/ }/ h; C. B% ]( a
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,) O4 T1 f" [" `& l! H3 {( Y* h+ g
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,9 E9 N. \: c/ K. o# C8 ?/ [
[*,android:screenOrientation=[i,"landscape"[/i,>* W" O, f* K2 x6 ^' G: @ f2 \2 x
[*,
3 t* Y3 P5 H* I* V$ b% k[*,
+ ]% l) X- B( q& Q[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限6 z& p5 N' m: v
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
% E2 @5 p$ J4 B) I; ]0 m[*,+ [2 p' E6 k8 Y( G. V+ h: Z
[*,读权限 N- ?! A* L5 W5 `' o
[*,
8 g+ u5 U6 v. f- @9 ][*,
e5 J' i7 H1 m[*,写权限; W# o6 ~( ~% Z Z& S, y5 v
[*,
( ~/ C* q2 E, H[*,
! q' O9 q1 ]7 i! g2 P[*,电话接收以及监听权限( [: t/ w, Z& [$ V( ^
[*,
5 I- h3 W; o. x; H! ^0 p# t5 r' \) f[*,9 N1 D4 M9 `& q! R) _0 Z
[*,短信接收以及监听权限
+ c# D+ |6 V1 S5 D/ ][*,
" W" h- `4 z, H8 t, ^[*,) v* y8 w, N+ Q; Z+ P
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页$ s! V% |6 q! x: D
[*,* H- J# F5 F# R6 W r' T I$ B
[*,% ?" P% H7 Q" n; a$ P
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互/ O% T4 ~0 B) m6 M8 M
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
. P# V7 X$ r3 ]7 H7 e[*,[font=宋体,所以需要这种方式.
8 J: P! [" j/ d X! f' K. |[*,[font=宋体,在JAVA[font=宋体,中自定一个类
8 o) U- z& a* ~5 Q; J: {1 e[*,Class MyData2 n4 p3 Y6 X% x4 K
[*,{
0 E( G/ D5 N+ X5 {) B6 }[*,Public:# n0 _8 v6 K+ Z! J% b* f
[*,Int a;
2 r5 M) n2 p6 \* e# u' o3 k& I[*,Int b;6 R1 i1 s& J3 x
[*,Int c;
; }% O- _1 \' T7 N5 S[*,……..};
8 {( J7 y/ j; f; I/ l+ J8 m[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
* U4 J! L# T' Q; j1 w[*,public static native void GetData (MyData data);
4 N9 [+ h# c, T# x[*,JNI[font=宋体,层中声明7 T* W* s5 w* r3 H& B9 V$ P3 [
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
2 h! P9 F- i: m: l9 }3 R[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
9 ?) P$ T* L, u[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
/ F: q# S( ^. p* M* X[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值# Y& k0 H* s" x8 t' [4 O
[*,env->SetIntField(m_pdata, “a”, 5);
. g( w- M' k2 b; [[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.- a. {4 e# G. h" H
[*,- a5 g! i0 x% A
[*," w5 V+ `- I% s. }4 E Y
[*,6:[font=宋体,工程搭建
+ ~2 G4 F/ g: k8 |[*,[font=宋体,首先编译引擎代码.. Q- a9 W4 A# e
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.- [7 H& j: t+ a2 u$ N
[*,[font=宋体,需要重新 Cmake
* h8 { U# ^! Z4 U[*,[font=宋体,编译好代码后打开ZSDome
7 c' r9 f5 V6 o) M[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下6 i! Y. u2 _" l. P: X
[*,[font=宋体,然后直接直接运行即可.
" {0 C% K4 Q6 M' ^[*,$ h" V# ^: f Y0 C
[*,对应接口
* O+ l5 v, b; p[*,Android, J6 r! [5 [6 j7 J
[*,DemoInit----[font=宋体,初始化引擎
2 H7 u( r- D* J2 ^1 d: u[*,Render----[font=宋体,渲染主逻辑
. ?! [2 q* h# |7 Y[*,
# h" i' }1 M+ w- b# A[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用$ m# W2 Z) Y* g) a# l/ k
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib9 K E) h1 r! l7 _/ p, v
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a) x# V/ l2 F6 x( |
[*,! r* V+ q H( Y+ H6 I& m
[*,然后使用:
' u9 m" y3 O8 s) J2 H[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
7 V- T* i/ U$ @ K% [[/list, [/td][/tr]
2 ]/ ?- T# Y4 D- y4 U[/table]
3 `6 C8 C( M! T- w
; F/ T } w1 K' y' y9 G! ]
8 D3 o6 S9 b/ @& j |