|
[table=98%,
p. P3 c+ F; G[tr][td]
; _- H4 h4 p8 F- Y+ U( @
7 q" S: Z) }. q( P& Q[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
, m- l6 o4 O) U( p& h! {, I[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
- |- Y& S* B. D4 M[*,
- t# e) `9 l' f& w/ K[*,多点触控:+ q$ \7 Y# Z. o+ e0 i& E
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
4 [( ~3 F6 A* O! l3 U$ ^% U[*,原理:
1 k4 D2 `3 e. {[*,Int pointCount = event.getPointerCount();
( H% U- X4 g* _+ Y[*,获取当前的点击个数。
: A8 J1 T# i& n {8 I3 ?; I[*,ACTION_POINTER_1_DOWN
/ }/ n- p" h3 ^% y[*,ACTION_POINTER_2_DOWN
& w2 `# b! K2 p[*,ACTION_POINTER_3_DOWN
! q; ?* Q& t# p5 c0 f( d9 e& Q& ^[*,ACTION_POINTER_1_UP/ p2 |7 b5 V8 ]! X
[*,ACTION_POINTER_2_UP
9 E" C# d( Y$ C. p[*,ACTION_POINTER_3_UP
1 X; Y H( _2 }1 X[*,ACTION_POINTER_1_MOVE. T3 H: D0 ?+ ]- r9 x2 n- b8 C5 _
[*,ACTION_POINTER_2_MOVE
6 C. h( B; S% O N& m[*,ACTION_POINTER_3_MOVE
' }# b- u, k% h9 Q6 U[*,[font=宋体,获取各个点的事件响应
- y7 I" S. U A[*, j. r/ {( y2 M+ P7 z
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
; ?2 n7 M$ P5 w8 O: S5 i0 E; X: f" n[*,[font=宋体,同理第二点也一样。! t4 M: o1 E" \* a8 U3 j
[*,: Y# q r9 `$ ~( U+ H( C" Q
[*,2:[font=宋体,安卓生命周期; D9 J0 I5 R7 C, s* Z2 Y$ A: s
[*,[font=宋体,默认的安卓生命周期为点击应用图标# x1 a0 q9 U D: B
[*,OnCreat OnStart OnResume& Q f# {" q8 T2 D
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory& {1 T: `; R1 S3 _
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.5 E3 I7 c3 e# V8 \, M% q
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
( D2 h" e2 V) o* i! o! {[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;2 l' ?1 f# l2 q8 E" m' V
[*,[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,就可以了不要让他走周期流程# z7 n. x/ C r
[*,6 c" `3 p$ x+ R- j
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏 H: O3 y5 K% s( B1 f
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
5 o; b* \* D# _0 w, R8 p# G* o8 A[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.( @% o2 s! C: |" N8 F7 \+ q& T k
[*,[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,.
6 x+ z4 d1 d$ P) O[*,4 K+ U3 p; v$ M+ y. F4 o$ G. w1 s
[*,[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,具体写法
/ ^& l+ ~2 ^5 T+ i( _9 e/ `: p[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
# u6 ?- t" ]0 t+ _[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
g& L8 e% j* P[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
" M. D8 f* k3 I4 E2 g* B[*,android:screenOrientation=[i,"landscape"[/i,>
' j) _2 h( R5 D' s[*,3 l9 x, t! ]9 q) U; q
[*,
/ X/ D, W% z( w0 c z/ Z; ^' {[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限" U4 S. L0 T3 c7 f1 j: f
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类. M. a f, E8 [% ?5 J; O
[*,3 [, R/ y4 g8 z+ U
[*,读权限
/ l+ ], C3 P6 G: v# Y/ |6 A G[*,8 P) f s! k! N. \4 d
[*,+ t4 k8 p9 [0 U
[*,写权限
2 C( R- n- H f$ D[*,
! H4 ^3 }* y: M( p* ~3 S! [[*,, @0 P; P9 f0 c) _! w7 P
[*,电话接收以及监听权限
$ _2 z8 W3 _( W2 T. `[*,6 |. _! |6 b% B- w
[*,7 }; R5 [5 q0 V" U( Y
[*,短信接收以及监听权限' L' \( ?% v8 L$ q9 x" ]
[*,
4 t6 F/ ~- X) r' ]4 D[*,
7 ?/ k ^! Q0 J* u; f[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页0 j. a4 m: [" B. [' l7 V
[*,
8 [1 L* c3 K$ e, X2 K6 {& _[*,
( \/ L2 V% l& H' R q# x6 u# W[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
2 e" W# y L. I[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
5 D; _8 [/ I n% I! x' P[*,[font=宋体,所以需要这种方式.
7 h0 J/ R" d. o+ o* t2 M+ s[*,[font=宋体,在JAVA[font=宋体,中自定一个类
2 ^( H& |& K9 `[*,Class MyData
# i+ i3 k z+ y( ^[*,{
; T0 }1 B p, d, g0 x[*,Public:( f! Y6 J* T3 L% c
[*,Int a;
$ K T& J6 [) }/ w6 M- w[*,Int b;- i% o: q- ] s9 T
[*,Int c;
, C* t7 A- X+ z7 B; L' r5 F% {9 u[*,……..};
1 a1 E0 u; ^$ i# Z[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明/ y) l0 J! N n& _" f3 H
[*,public static native void GetData (MyData data);
; S1 v" K) O1 B8 r3 {* k[*,JNI[font=宋体,层中声明
% j, a7 x5 x$ |% f; @5 d[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
" Z% R; B, \0 d v, Z9 m# M) s[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
' ~, o9 A& Y6 k9 x4 U* w# t[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
$ |( z8 X/ V L+ B[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值1 H3 `0 V6 {) s" W3 a( K) j/ {3 ~
[*,env->SetIntField(m_pdata, “a”, 5);
$ ~1 Y U6 |& s) H! d1 _[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.) [) A8 n* o- N) ^
[*,- T! `* p7 J8 P$ I( T
[*,( \- H* H; N, x# F8 J
[*,6:[font=宋体,工程搭建 j u& W2 p- w) c, t
[*,[font=宋体,首先编译引擎代码.
3 } _0 k+ ^, r3 C* ^3 h[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.7 d; f2 A* B: j3 \
[*,[font=宋体,需要重新 Cmake
5 D2 D" B( L! P `1 L1 S[*,[font=宋体,编译好代码后打开ZSDome$ f# n: U" x0 b T3 V
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
! c U2 M$ \% k, j3 H. g; y[*,[font=宋体,然后直接直接运行即可.4 `$ ^* h/ ~, d2 P3 ^) }6 F: J
[*,
: {" S% i' ]+ G: C* a3 I* b[*,对应接口
' k4 f b/ w% Q; K% j% m) }2 z[*,Android
7 b \8 X' B6 p* Q" E }/ ][*,DemoInit----[font=宋体,初始化引擎1 ]9 r$ L" @) ^1 j q0 P0 U
[*,Render----[font=宋体,渲染主逻辑
8 e" m- s% b: h X$ I/ y- G[*,6 T. h* I- d4 h1 x2 ~' }$ e6 P
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用- }, ]8 q3 I x/ `
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
4 c- T( O. T9 S+ d[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
/ `) `! p2 F6 C# J8 r- B6 A. Q[*,
) A, K( R7 H8 g( O3 O[*,然后使用:
: g, u5 F, y8 d+ G, D: t% U7 g[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
" o+ ?4 w9 V' s( G[/list, [/td][/tr]
3 [) S# m* y0 |1 H) V$ B- M- Q# C[/table]
" H9 x. f6 i5 d) X9 o _* y: _1 O3 q. I1 C A) G3 Q
+ W" m6 v8 C, ^: v |