[table=98%,7 y7 F+ h6 B! X! W& x
[tr][td] Y& r3 I6 e( e4 Y. P6 s( G1 |
* U% V6 X6 w% l* q9 j) k# _
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,( o# F$ h& i: K- n! o2 h7 g
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案" L8 J, N1 @* i' n6 j s
[*,1 [1 C8 c9 E- k% c# m
[*,多点触控:* a% B: d$ [* w9 o; b( s! n, I0 [6 |
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。6 l4 T1 i0 D! F8 h
[*,原理:# t1 e! F7 ~/ F# P7 W/ O: s, z
[*,Int pointCount = event.getPointerCount();7 [! ~2 ~. }) B* _
[*,获取当前的点击个数。
8 I5 j& P5 ?( Y) V[*,ACTION_POINTER_1_DOWN( u5 R4 O" P2 K
[*,ACTION_POINTER_2_DOWN* `1 y( o: z- M
[*,ACTION_POINTER_3_DOWN. X& z" F: b) \) }1 {+ g7 U0 j4 ~
[*,ACTION_POINTER_1_UP
1 K5 ]1 r3 z2 Y[*,ACTION_POINTER_2_UP8 v1 B& f/ ?6 x" X7 f0 l
[*,ACTION_POINTER_3_UP4 Z4 \6 \( t+ L6 n
[*,ACTION_POINTER_1_MOVE
' U1 h+ c, {0 r[*,ACTION_POINTER_2_MOVE1 x8 T- W. S. `; [+ u9 j
[*,ACTION_POINTER_3_MOVE
. L7 n! ]( b; F) w& q[*,[font=宋体,获取各个点的事件响应4 k" z/ l ~) f0 t
[*,- ]$ x) R, x; u! R
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。) J+ E& V$ T9 Y$ x% w% C3 Z* K
[*,[font=宋体,同理第二点也一样。' N$ Y7 }+ \- S& A9 e b% i" V
[*,5 l& d2 N- ]$ p: t, ~% W
[*,2:[font=宋体,安卓生命周期
8 I( m% ~) W) U, F5 Z W[*,[font=宋体,默认的安卓生命周期为点击应用图标
9 s5 o8 I. ?* U1 ?% [[*,OnCreat OnStart OnResume! r2 X/ u7 K: p9 n) O. e
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
: F0 e6 x& ]/ h- a# C( E[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
3 y! ^0 k S. [' s% U# m# R w; Y4 ~[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
1 T! m1 k. L7 E1 Z[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
7 U. b! g, S, r2 P7 o[*,[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,就可以了不要让他走周期流程1 ^4 I* X# c0 ^$ r1 \) u7 j
[*,$ b, f/ C) R' e7 l/ ]
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏+ M! J6 L" P3 z
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
" e0 Q+ s3 W) x7 j1 g[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
$ J: C& ^- S% @" w- w2 V1 r[*,[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 E1 o- T* L0 p* q7 j
[*,
. ^% |; I, U; k[*,[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 x$ K7 [) S5 p
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
% Q1 _/ x5 i0 D* `' O0 Q# ~0 q8 i[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
/ V) _* l0 x0 _9 T% N0 C$ H9 V[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,! }, r/ d; _2 d! g K
[*,android:screenOrientation=[i,"landscape"[/i,># d0 J% l5 o4 @! s
[*,# k+ s1 Q: w1 ~% n/ p8 `
[*,
+ `" L, b1 ~( @) s" ^+ A[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限- s- @ d) r {5 N. Y0 Y1 n& n
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类6 _( _, G n2 Z
[*,
^; P: j, g# {- l[*,读权限5 C! x& b; a! B4 X: @, I. N
[*, E! X( s! U$ c! T8 H
[*,
0 n% O. U( u; \, f) i. E0 u[*,写权限
1 T; g4 @; z/ K8 x+ a9 N3 v! ~5 L% J[*,
. Q+ B2 Q# }' j4 T. Y W. v, _- \[*,
$ o8 t" e0 L ^* W* k7 { L5 s# u$ p[*,电话接收以及监听权限& g0 ?" r; t) }* O( h# ^% u
[*,3 [3 k5 m' ?5 D- Y) ?" c
[*,) }" j+ R) {; Q4 Y2 F3 ]
[*,短信接收以及监听权限; H" {( l8 _4 |: ^2 D2 s+ F0 e
[*,
6 m- \2 U% \% m$ M9 ]) e[*,6 N6 |- \& r, s5 R, S' t& v6 h$ E
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页9 `( ^4 Y" @9 F/ m
[*,
! ~7 O' u, u4 F3 V" E) a9 [[*,
% k! K, x" t, ^2 \4 j[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
% L' K& ~- |8 @7 J* T. W) L[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
8 f# e5 s6 ~- I( M[*,[font=宋体,所以需要这种方式.
5 a+ J8 x3 Q( y[*,[font=宋体,在JAVA[font=宋体,中自定一个类+ c; ]" R) x8 Z) u
[*,Class MyData7 }3 h& x- z6 z4 P# a, x9 U
[*,{
. b0 q' `7 U8 m% g# \; s5 E[*,Public:. S+ A R! w* y1 \& K! q6 P' B
[*,Int a;- {% k- B8 T! U5 H! C7 U1 \& l
[*,Int b;! e2 W' a* x2 O, i' ~
[*,Int c;; X+ | m0 H# u5 f1 |- b0 H
[*,……..};
% g- I, q8 N* @[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明 t7 y" e7 K8 T. y" M
[*,public static native void GetData (MyData data);5 @) Y' ^; T5 Q4 L4 K
[*,JNI[font=宋体,层中声明
' Y4 |1 ]' n8 K8 S9 f" N[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
0 Q# K( M, s: c4 y& Q0 E/ b[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
1 h, [: P/ E5 J- \1 n( s[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
7 r W' c, {- G# _# i[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值9 H4 A5 V" r4 `' t0 q" V, S# l
[*,env->SetIntField(m_pdata, “a”, 5);
# O! z. M' J8 g8 i( t( z# q[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
+ g2 e" f, c. u) z2 _[*,
- V- t" s5 l$ u% e[*,
! {$ L0 D3 Y+ V3 x! Q- L[*,6:[font=宋体,工程搭建
2 }4 a% U" X; L5 j9 F7 U$ t1 n[*,[font=宋体,首先编译引擎代码.0 c8 \3 |$ g5 d* Q/ ~7 W) T1 G
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
) W) Y$ O, k6 h$ z9 h/ l, H[*,[font=宋体,需要重新 Cmake
9 C5 e9 x8 s" i, S, }) q. K[*,[font=宋体,编译好代码后打开ZSDome- m, }$ b7 k; T7 o/ x
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下- q8 O5 X- l! ]& r1 p4 w: t
[*,[font=宋体,然后直接直接运行即可.
' Z5 v( n5 ^/ y- g[*,5 ~0 o( Y3 J; E
[*,对应接口+ o# z! S( ]! f9 O" D1 r+ F( Z
[*,Android
X6 M6 y1 M! L: x, d9 H0 v2 E[*,DemoInit----[font=宋体,初始化引擎
/ |' j: c* V$ P5 }: G[*,Render----[font=宋体,渲染主逻辑- Q. ]/ c8 n) g1 c
[*,
1 I3 j4 }& `: W' H O* Z% c ~[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
5 {) x- x, Y% z5 N( ~0 g[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
& A1 ^) \6 q; F. k[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a( E* O- w/ l# a. p, c- O
[*,
& H3 _# \+ v( K$ m" s7 U[*,然后使用:
5 C/ @* B v3 V; M( N! t% r8 F" {" }[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
$ O. n# R5 P( ?! ~- H5 P1 n* d* ?[/list, [/td][/tr]
2 a5 R% ^# w- [" O! B F[/table]7 q0 y5 m a3 k, t6 u2 j
8 d c D. K( S# O+ x
8 i5 ]3 C0 r0 l |