|
[table=98%,
. u% }# @9 T6 D1 Z9 l) q[tr][td]
% v" [# g1 i' c, u# b: M2 u1 e. H% Y$ N- m8 v# O. U; r! U
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
& z/ {+ m2 O+ d8 `[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
+ R; b7 q) y- I6 V[*,& E1 W, R/ h% z$ q4 e3 l: p
[*,多点触控:
( u9 L# N, C- a, [[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
X+ J) M" K& o( r# R4 d# p[*,原理:
6 ^& D% m0 C. H$ b X' h$ g- K[*,Int pointCount = event.getPointerCount();
6 r5 S8 S! p$ w- g[*,获取当前的点击个数。
$ ~. }7 ?$ ?& B- @4 o* `! W N[*,ACTION_POINTER_1_DOWN
w) t; j5 V* z' o[*,ACTION_POINTER_2_DOWN, c' v" }. o( V! I) g/ o3 z+ A
[*,ACTION_POINTER_3_DOWN
' v5 }, k0 V l$ R2 x[*,ACTION_POINTER_1_UP& @( d9 O7 s7 u2 f8 k
[*,ACTION_POINTER_2_UP0 p: r, f$ D0 {% t8 [' v( t
[*,ACTION_POINTER_3_UP
4 A9 E& W6 u6 }6 V5 V9 x0 X[*,ACTION_POINTER_1_MOVE4 P+ Y \- v/ ~4 `& j
[*,ACTION_POINTER_2_MOVE
# Z3 C/ v, w% `[*,ACTION_POINTER_3_MOVE) H5 j2 U" _- K$ `$ P5 u+ K! {
[*,[font=宋体,获取各个点的事件响应
" t4 {# y b: I t+ \1 q, T[*,
, y/ _% ~4 r5 \, A1 p) j% _# a. x[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。3 `& p. }4 P' R4 P5 ~. O
[*,[font=宋体,同理第二点也一样。
) p7 _2 x$ Z) S/ V' a4 i# o* Q w[*,
9 y$ p+ R& a0 `5 f& n; j! p! K[*,2:[font=宋体,安卓生命周期
1 X$ C7 x* _0 I$ l, ^! D% Z[*,[font=宋体,默认的安卓生命周期为点击应用图标! Q3 u: F0 v, A+ ~
[*,OnCreat OnStart OnResume
0 W3 s# H" V( Q4 V[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
/ Q, H* ?" Q" ?" D. w3 P- M% c7 O[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
1 ^" J# r4 K; D. i/ _% a9 S[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
" U R/ y O; v( i[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
! n" ~( H( Y: b# @[*,[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,就可以了不要让他走周期流程
. d4 K4 s, i1 _, X r[*,2 \6 j! W9 ]& V( c* c3 {% Y! V M
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
7 p7 G) X" r2 V( X[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.5 i/ P3 M- ]. @0 |$ ?' P. s3 ~
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
4 X. u. ]5 X. u+ p: N[*,[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,.
. V- w- Q( O+ d6 ?[*,
+ _2 z* ^* I; s& r2 [! T$ ]8 r[*,[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,具体写法
5 p& N$ b/ h; [: K' O- M N[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加) p, A1 J1 G& f/ Y& [
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,% h8 L5 w2 C% F" `' Q
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
( t- `3 o; U: K: R9 H; I[*,android:screenOrientation=[i,"landscape"[/i,>
/ ]: ^! ^# C# t! Y1 Z/ L8 O[*,- a% A) `" B2 g8 q7 M4 d( q
[*,. n1 O. J- l% a3 |, }/ |( S" C
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限* \0 G2 X; O* B8 P. c' g6 Y
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
3 @0 k- R# r, ?6 D& c7 j; s, p[*,
2 V. @2 i$ g3 \! h6 X[*,读权限
* ? o% ^7 G: h( }0 f[*,0 c" ]5 y- o+ N0 w- j5 E
[*," v& q J, z! q: e F
[*,写权限" E. ^: C# B y9 U
[*,
; A* R$ F% f+ g$ f/ K* Y[*,
* j2 ]* `/ \5 V# L[*,电话接收以及监听权限
9 X2 N) b' j1 X$ |) r4 X[*,7 F, F9 r0 W9 o" u! K* @
[*,
% c. Z# k3 l6 z. P; I5 R; P2 J[*,短信接收以及监听权限2 I! e; m* m9 S5 w% O
[*,
1 Y3 _$ g7 s, J5 H8 D$ ?+ W6 o# s[*,
' W- n! w$ z$ {' B& F5 S$ O3 q' V5 L[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页: W5 U0 A0 c% X( {' g1 L4 v# [
[*,2 s" k6 z' Y: c1 u
[*,
}( s: ]9 I7 E& b7 b$ p; [[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
' g2 t5 u g) t+ o[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
% g. U5 q N' N7 V+ W; H[*,[font=宋体,所以需要这种方式.7 J9 P4 i& |) m9 g$ d
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
. @; m ]7 g" l# d9 ?% y: {[*,Class MyData3 n8 S y" l2 {4 n
[*,{3 R6 o3 M& s3 m7 R: |
[*,Public:/ Y5 e; b2 f. O' ^+ v
[*,Int a;
0 z- r* C) E$ K/ k* ]) n& p[*,Int b;! O1 @# _& ~3 H1 G7 ~, S
[*,Int c;1 h) j+ f4 h# i4 l+ w. ]& j
[*,……..};
- v" [# V" T" W$ C[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
; Q! O& @% _4 r, w- l. o[*,public static native void GetData (MyData data);) j1 O" J6 N1 r+ U5 ?4 a: H
[*,JNI[font=宋体,层中声明
( A4 Z" H N5 _' [5 u[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata) ?5 t7 D3 F( v" R3 z
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
V |$ [$ i7 H[*,jfieldID sound = env->GetFieldID(cls, "a", "I");2 K9 Z+ B+ O3 {; H# ?. u$ E3 F
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
4 H( _. ]9 d; g1 C0 c[*,env->SetIntField(m_pdata, “a”, 5);
J% b, l2 Q# ?# y5 \% G6 P& h4 P8 Q[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.6 E2 f0 q) }. V D3 Z- r
[*,0 h6 z/ U1 M! g
[*,8 _- o$ P5 q F: i, A! L: u
[*,6:[font=宋体,工程搭建
5 j# _- {2 w/ p w. x[*,[font=宋体,首先编译引擎代码.
& X/ o: _2 L+ e# O6 A+ x[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
& d X' U$ t2 e( o0 M, e[*,[font=宋体,需要重新 Cmake/ i; `% F3 v8 C, Z
[*,[font=宋体,编译好代码后打开ZSDome
( H3 u* a* @1 i6 \9 M" V- |[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
4 S8 O& w7 [7 v[*,[font=宋体,然后直接直接运行即可.
3 z" S% A/ \# L) O& e& B3 w[*,8 ]' n3 I# j ^$ a- O
[*,对应接口( G3 v9 T3 A6 ?3 N$ o1 B `8 w
[*,Android. l. t! h& n' C ~6 j/ \) O- i
[*,DemoInit----[font=宋体,初始化引擎& l+ V D5 ~' K1 h/ M
[*,Render----[font=宋体,渲染主逻辑& X! x5 }# a8 k. G) N2 ` l# a1 h
[*,
5 f/ n: d: Z. s- f6 z[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
& {. h6 E1 `8 N% L[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
4 H9 b4 K; W# d5 O[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a+ o# [0 Y: y$ r H
[*,
6 U8 O+ u. j4 a9 ]! z/ y% n[*,然后使用:
% R) D% a' }+ A. J& A[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()5 t" I6 o9 ?. c( X6 Y2 k. q0 u
[/list, [/td][/tr] D5 |) G4 K7 v6 d7 T: b6 o
[/table]
6 n/ C: p2 Z$ K9 n- t* y' g6 S8 c! ~
/ J$ h) g/ z; v" o( ~5 ^
|