|
[table=98%, c6 v, L: W7 i- Z; Q( ?! V
[tr][td]
1 M) H' F- P/ B+ [5 R5 Q. r; D% |7 I+ \/ j; x
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
3 e# E8 q% \) |5 W[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案' A5 \# B$ {4 o) N
[*,
9 C! A! g% A3 i# ][*,多点触控:& U n7 j) |3 G
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
/ Q% V0 G' ?$ j/ c. C[*,原理:4 m0 {6 Q' O5 b4 C% ^) H4 b3 M
[*,Int pointCount = event.getPointerCount();
! `" r2 l2 x% U8 `5 p4 O- \6 o% U[*,获取当前的点击个数。
* c% ^5 ~; v% \6 [[*,ACTION_POINTER_1_DOWN* d- [: _+ {/ i Y' c0 Q
[*,ACTION_POINTER_2_DOWN
4 H- a7 w8 S: B. k; i9 `8 ?8 ^: B[*,ACTION_POINTER_3_DOWN
. c, J. f% O; i0 r# z[*,ACTION_POINTER_1_UP
9 i- M5 x, X! J- p[*,ACTION_POINTER_2_UP1 ^0 ?# o5 D, k: {9 r! h( f
[*,ACTION_POINTER_3_UP
3 [* W$ n" f7 Q9 Z5 d[*,ACTION_POINTER_1_MOVE
- v5 Q" [. d1 O6 O z( r* b7 Z5 @[*,ACTION_POINTER_2_MOVE) d: {) U( _8 F) U/ B
[*,ACTION_POINTER_3_MOVE" A \2 K7 N/ W4 a
[*,[font=宋体,获取各个点的事件响应
6 n" t& g! g2 ]2 p- u$ t8 \[*,- Z7 Z+ z7 W& F$ k4 G7 \& K! u9 W
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
q+ K2 b6 E3 s- t' s' G' R& v% j7 i[*,[font=宋体,同理第二点也一样。2 ]" [+ `/ Z4 G! } F; N2 w
[*,
: Y t) M- ?3 w. @ R7 d& x6 k* B[*,2:[font=宋体,安卓生命周期
4 ^$ A" _- T1 y# Q, \4 v6 b+ @[*,[font=宋体,默认的安卓生命周期为点击应用图标
( r* J8 d$ q! |2 Q q[*,OnCreat OnStart OnResume
$ T5 I1 D5 [, P* N) Z& ?2 k& \" X[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory% n8 _2 [% S- v( T0 ~ j# M4 d
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
7 ^% H6 K4 Z' m" K- D- ][*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
4 W+ Q& X7 R+ C8 t* A3 {[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
- {. Z7 s" i% o4 j" H; d[*,[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,就可以了不要让他走周期流程5 w4 n5 k, d( h2 l
[*,
7 [. w$ ^7 a: z$ c8 t[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏3 h J) c' b' @- e* L2 D
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的." q" B2 m0 X* y& c2 p5 D7 P
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
5 B5 u/ K# T/ X$ {& 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,., b. f- {- q5 S0 j! W# g; g
[*,
# S* ~! w% V/ O* v( C6 A; L/ B[*,[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,具体写法7 y: G5 K7 ^+ J; `1 z
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加 `$ a; L0 E" p* O1 K% |
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
" m# B2 O+ w6 L[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
3 g8 L! k2 m0 d: g[*,android:screenOrientation=[i,"landscape"[/i,>: p# W+ B/ o$ ^+ y7 ~) m
[*,0 `! R: K U4 ^$ \. Y. D. {
[*,# E7 J( p: z* j/ R% d5 U
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限) C2 i3 f* ?* A) E) b0 D
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类8 l) w% U- O; F2 Y. T: O8 T9 U- o6 o8 ?
[*,) S& O8 h, H% {+ Q7 X' D$ B
[*,读权限
' e1 Y4 N8 G" `3 K2 `[*,
4 I' D) T, L0 u% C[*,
1 ]6 O6 M; m+ b5 t$ R[*,写权限
" D; y) Q3 w5 G2 t. l( T[*,
% d2 x5 w9 S, u* o4 u- e( l[*,' E4 \; s5 P7 E3 M7 O& l8 w
[*,电话接收以及监听权限' v* ?6 u3 M: w- r7 G; U" d
[*," J& a, t: c( E
[*,7 F$ u8 g% L2 P& L! h9 e: I0 @" O
[*,短信接收以及监听权限
3 }, E1 s% E# ~; z; y8 R6 N8 O[*,9 W1 i7 E) e) U0 J
[*,. g4 o2 p9 A. {( c; w7 n8 t
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
* U4 S! ` `7 S& T; D( Y[*,
* U& K; j# g8 C5 k; D. y) ^ c[*,3 J9 P" B, |6 C
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互4 `5 m' b1 p* A% M
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.0 i: ]" k' U) Y9 |; _8 A2 S
[*,[font=宋体,所以需要这种方式.
: K% E7 A, q/ e. V[*,[font=宋体,在JAVA[font=宋体,中自定一个类0 P0 |. k8 Y9 }* V R
[*,Class MyData
% ?5 c2 U+ K7 `; O; h[*,{
* o2 p6 | i* P: A[*,Public:
X( M0 n( V+ m& K: l[*,Int a;5 c5 Q4 g( Z$ P; L
[*,Int b;
! m4 U: }2 |8 a[*,Int c;0 A2 e$ P& [4 O- z$ m: [. v. N
[*,……..};+ M. J; G. g+ |# z; {
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
/ m6 ?2 U f% b; H[*,public static native void GetData (MyData data);
8 Q, Y# P3 c; W* |2 u[*,JNI[font=宋体,层中声明
4 X. k5 U h* y2 O$ K, g4 G[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
4 H- o$ X9 Z1 H[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
0 Q0 @4 S8 Q1 }$ f( e[*,jfieldID sound = env->GetFieldID(cls, "a", "I");* t5 H' Z4 I% b9 I/ `" q' c
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
& g9 z# ^" S: x1 z8 L- D[*,env->SetIntField(m_pdata, “a”, 5);8 E0 ~, Q3 t/ ]8 F( o& ~$ B
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
+ O6 a ~0 z, T0 w4 ~( a+ ?[*,
! }0 W8 X9 F( \$ Z[*,
3 f7 W* W/ U4 l+ H5 p/ ~* E/ L' J[*,6:[font=宋体,工程搭建
/ T; k6 h9 L+ t- c0 W! `- r% C[*,[font=宋体,首先编译引擎代码.- u& Q; C6 i+ E& y
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
. s( I0 }. E& o7 O9 Q[*,[font=宋体,需要重新 Cmake
2 c' }# }1 i, p0 g8 c' q, O[*,[font=宋体,编译好代码后打开ZSDome. b* w! Z# P0 Q) s
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下& O! G5 c9 g0 y% D0 h: ?# L
[*,[font=宋体,然后直接直接运行即可.
& `% h9 m( L }4 a0 y[*,* z8 E& n5 D- d2 O6 J: `3 q9 c- @
[*,对应接口
8 H, E/ K4 w4 @2 u, h* m- [[*,Android
5 F9 p0 T) ~6 B! K- Q[*,DemoInit----[font=宋体,初始化引擎# d* n l/ G5 \& F1 `1 U
[*,Render----[font=宋体,渲染主逻辑/ T4 l$ o7 m* g( M0 ?
[*,: q( @8 x q4 h# T9 z% ]4 d j
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
4 `# _' Q0 ^3 J[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib5 H0 T6 m- d' }. d' }0 ?" O
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a; \6 M8 R0 D" n+ x2 ~ ^
[*,
3 G& R( \: B, t8 Y[*,然后使用:
5 Y2 }9 c4 e2 B: {) H% j: X[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
& \' S! s* o) w4 }( j3 Z& }[/list, [/td][/tr]
6 ^! w; d6 H4 }1 q2 R4 }[/table]
@. L% n9 Z8 d+ _. S) b! y" `6 o' {: I/ o+ T1 o
: ]2 W1 n I; ~2 s |