|
[table=98%,
8 x5 a. _( T" ^; A% o- {! j[tr][td]" k5 } r8 {% L0 {8 q/ v) _
4 h, f2 P9 r8 K Y* N6 Z. r[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
' x7 H' r7 [* B2 }( i6 E[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案5 v1 q2 q( E+ n( y. L6 K
[*,7 a# o" Z) Q7 I4 P
[*,多点触控:# ^- F; s. v% q8 ]6 L1 t4 T7 O" V" a
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。- ]3 J1 {% j3 d7 l" K. b
[*,原理:
" U5 f4 ?# A, j2 B7 l1 j4 S; f9 F[*,Int pointCount = event.getPointerCount();
: M" ]% I+ V) e% E[*,获取当前的点击个数。
2 k( N7 u6 H9 q3 p[*,ACTION_POINTER_1_DOWN- G+ Q! w! r4 X% J# c
[*,ACTION_POINTER_2_DOWN, y7 V$ C" b$ P$ h6 a( m. t5 W
[*,ACTION_POINTER_3_DOWN
j. V" l! k, L7 A# y[*,ACTION_POINTER_1_UP
& y/ n' J" W1 a1 v[*,ACTION_POINTER_2_UP
, x1 F5 ]) H+ u! f% M[*,ACTION_POINTER_3_UP
* p8 o6 z: G9 f[*,ACTION_POINTER_1_MOVE
- M6 |, d5 n6 ]; a; C8 C[*,ACTION_POINTER_2_MOVE+ m. G; @. e! j* r0 y! }
[*,ACTION_POINTER_3_MOVE
6 V) r/ l- i* ^9 ^[*,[font=宋体,获取各个点的事件响应; z4 ^5 V2 c% y
[*,
; ~' X3 D6 p# V6 [' _: ?1 e[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。* u& f+ j5 x) W
[*,[font=宋体,同理第二点也一样。* S. b+ O& N( O
[*,2 Y9 h# l5 w- x9 C4 q, r1 V
[*,2:[font=宋体,安卓生命周期
0 Z, S! m# a5 p/ R[*,[font=宋体,默认的安卓生命周期为点击应用图标: x/ t- D% {7 |3 A8 H! c: o3 _
[*,OnCreat OnStart OnResume
5 d, t! e) M5 J- G4 T2 H3 G[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
. q( J& U5 j' I[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
' q: S/ v" o% |7 S[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到: t( Y0 q3 ]7 {3 [
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;- J& k$ M+ \' u* O1 d- b& M
[*,[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,就可以了不要让他走周期流程
3 E5 F' j9 e, p3 K- {[*,
6 @7 Z- _) q7 M( r+ Q& s6 _[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
' S7 E0 j$ `* P[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
" j) b. e# Z$ t1 s; Y* q! @, r# m[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
( b) Z9 ~( b5 {8 g; ?* b: W[*,[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,.
: j4 ]" ~1 v5 e' F, @ b x[*,3 F5 g; g$ r* A, J3 M. c. _3 H
[*,[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,具体写法! ?1 c8 o0 l ^! H2 r. _
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加7 @ o$ c' r, B+ ?
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
4 U) _/ a A( D# [ w& ]9 E6 l, Y3 t[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,1 }/ T8 |5 ~1 a. o1 \( a% T
[*,android:screenOrientation=[i,"landscape"[/i,>' w2 x1 G, T; C% o8 e" H
[*,' f& Y& N% c8 N* f O) X1 t
[*,
. e- J+ H8 P+ p[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限: K7 ^# V% z( U# U) {
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类5 Q2 k5 v5 i6 V- _. V; p
[*,# u) ?7 Z- J5 g+ C& T
[*,读权限
# K) b8 a) _& R$ M& e% l[*,( m+ I& f, } ]6 g
[*,& i: g0 S5 b t2 g `& n
[*,写权限3 m! W4 o( i; Y/ Q9 R! v
[*,# m5 ~8 I4 N' d7 W# i+ t. T& A
[*,
* j. ]2 v8 y$ ]' X5 v: C[*,电话接收以及监听权限
0 p" A/ V) p/ J0 s$ T! F[*,
6 `7 c4 k* K) g$ v[*,# N/ w+ U0 Z- `$ Q/ }" h m' `
[*,短信接收以及监听权限
3 T0 ?: X! R( L" B[*,
# z y. r+ y, ]/ A: {5 e4 u @8 N# M: @[*,. ~" [; g# V2 [2 x" F" v+ i
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
! b3 ^% J0 a1 H% ^7 o2 x; R[*,, G' o) r3 Z/ ?; S# a
[*,7 \5 M6 P$ ]; w: U8 ^# V/ H
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互5 @8 _7 q( K' h) T5 H8 U
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.3 y3 E% _1 v4 m) w- ^
[*,[font=宋体,所以需要这种方式.
# b1 c5 u7 F! {9 f/ b5 N% v[*,[font=宋体,在JAVA[font=宋体,中自定一个类
' d$ R! P* m: K# T+ D[*,Class MyData5 M! P/ y& E6 e: N7 l# S% a
[*,{
/ Q4 `/ I0 ]% n[*,Public:
" U. g" S0 W! A2 y[*,Int a;
8 [$ a* n2 O- i+ R1 h[*,Int b; F5 D! s4 r( k4 W4 e: y
[*,Int c;9 q: `4 {0 d# \9 w7 v
[*,……..};$ b+ `* v0 R6 G; v/ ]7 ~1 O+ v
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
+ p7 y6 H* G2 x/ F+ K$ u; X9 U, m[*,public static native void GetData (MyData data);7 C1 t6 s; J# m! k
[*,JNI[font=宋体,层中声明
( o$ y1 Y; s+ Z, ?9 c% h8 E# _[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)+ R9 [& H9 a! T6 T
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
- m9 g3 r1 ]" v1 d$ ][*,jfieldID sound = env->GetFieldID(cls, "a", "I");
% e4 o" ]$ k* y1 w[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
) Z6 C. b# u2 d% P[*,env->SetIntField(m_pdata, “a”, 5);; L+ F4 |, B( o
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
) {' A p) j, x* |7 F" z& Z5 ?[*,6 L1 ]! g/ w- I: N
[*,. P& i6 K$ H3 A8 v b
[*,6:[font=宋体,工程搭建
0 Z$ b; d: r! j7 U/ |. D( F4 }0 n[*,[font=宋体,首先编译引擎代码.
6 V, j# j1 u8 p[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.! e- ^7 q4 p8 L
[*,[font=宋体,需要重新 Cmake
+ |2 [. c+ Y/ \0 s+ p. y0 b9 ][*,[font=宋体,编译好代码后打开ZSDome: I3 }0 E' [2 }6 Q3 ~ G' Z4 X
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
( h' }* o! E* f' T: h9 w[*,[font=宋体,然后直接直接运行即可." \9 B5 [6 C, u9 W
[*,; P7 f- b8 X Q8 T, ]5 M0 x7 s
[*,对应接口
4 b( |% D) u7 j: K8 u4 p[*,Android0 t, L' j7 j. U L6 ]
[*,DemoInit----[font=宋体,初始化引擎
* v/ M0 G! E. h: \4 j[*,Render----[font=宋体,渲染主逻辑5 ~: C _! ]- H- i( L- k
[*,
" W [) ^0 o) x+ w X. Z[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
; o7 y3 b/ h" O- Z4 K }[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
" P* X: B, E9 m3 J7 X r% M0 n[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
) M s$ M. j, _& W[*,7 Z1 H; s- g) M2 T
[*,然后使用:9 h8 Q: p4 A8 C1 ] s- T8 y+ }$ @
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
1 {7 e- S6 u* B0 t! d5 O1 ?1 c[/list, [/td][/tr]
: L# w3 w. Z( w) p/ T/ K7 @[/table]+ y L1 W. a! w$ S/ N
5 Q. B3 C+ B, v9 x F3 g1 |
|- y* q. y- h8 O! y
|