|
[table=98%,
6 u) s2 e& C8 f( o* s[tr][td]
6 E2 R0 p. Y* l6 r0 ] }2 w7 u6 B% k( P- }" C1 y( q
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
: Q/ a0 [0 s4 f1 g! D[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
) |! x6 z/ r o" ~! x" h[*,- }* w1 } J2 j4 o2 U2 e: d
[*,多点触控:1 U+ B |: b/ V, x C' h3 D
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
5 i0 ]% \ ^( \[*,原理:
/ G8 ?2 v; |2 ~' o: U( Z[*,Int pointCount = event.getPointerCount();6 ]* g# U/ S/ i( _/ M# t# k
[*,获取当前的点击个数。; @' \, M5 e* r& [
[*,ACTION_POINTER_1_DOWN
; T$ E, ^. Z' S4 ]7 J[*,ACTION_POINTER_2_DOWN
: S# @3 w7 J: ?0 C3 F2 Z [, x* }. a[*,ACTION_POINTER_3_DOWN
9 \% @2 m( d* e R" @[*,ACTION_POINTER_1_UP
( U) q2 e9 S: [1 O8 ]9 @1 P[*,ACTION_POINTER_2_UP9 f6 M$ g) \5 E, S; ~
[*,ACTION_POINTER_3_UP
* J& C9 D# f! ` r( ]6 Z8 V7 L/ y[*,ACTION_POINTER_1_MOVE
+ ?# ^! {' J# |& U- E( F[*,ACTION_POINTER_2_MOVE* H( f+ w* h- @ }- ~; v
[*,ACTION_POINTER_3_MOVE v) }. |, ]: R. {9 U6 W. Z0 S3 P
[*,[font=宋体,获取各个点的事件响应# H6 R1 j% U5 B
[*,2 E; \! X5 h" q" D9 h
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。# U {, @# D4 g9 `1 _! {) W
[*,[font=宋体,同理第二点也一样。
3 q1 C) A, `. [7 j6 b: {[*,/ z/ x7 Z8 n2 f3 g' H
[*,2:[font=宋体,安卓生命周期3 C8 g; r7 B& C
[*,[font=宋体,默认的安卓生命周期为点击应用图标3 k f/ \: p% S9 a4 {2 s
[*,OnCreat OnStart OnResume
3 y. z( M) a6 d M, j+ D[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
1 X+ Q9 U. w% l; a- j) u[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.! l/ {% m+ r/ S
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
2 t( X; |# X" b[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;* }: q# O1 d3 m% 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,就可以了不要让他走周期流程
" m/ O3 o$ U1 d% _- b3 I[*,
5 w/ _$ u- i3 i* Y9 D: ]& \9 t[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏+ r3 I& G; X& w. A( u# S
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.4 G7 a. E0 {0 R8 _8 F, E
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
2 m; \5 k, M& s' v/ [5 X[*,[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,.. T9 p8 d: G8 J7 P' |
[*,' b" `) ~9 x7 u: g6 h. ]0 j
[*,[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,具体写法
) p8 t' i# \4 h[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加4 Z, }1 C: ?7 S; S X: \- o
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
4 F1 p/ z) k) Z# P$ q[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,8 s; w$ S0 D* \+ t3 Z; A
[*,android:screenOrientation=[i,"landscape"[/i,>- |. c9 |; x/ E7 Z
[*,$ z/ Q) f. m+ V# [
[*,4 D7 {+ M7 V4 ^' ], |& @
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
+ e. W8 r4 x S5 W" D( v[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
! [; U( I5 U+ s( v7 D G) U9 K; Z[*,
' L$ u0 t9 s7 f. S3 m% n[*,读权限! \' H$ W3 I, u. l
[*,3 k) H1 {3 X8 I
[*,
. O2 }* A& g% S" L, n2 M2 v+ z9 e- W[*,写权限+ U0 _& @& G/ ]% [
[*,
! c- U* Z! @: v5 B7 r8 I[*,
9 l; U1 Z' X* U$ o; _% Q% e[*,电话接收以及监听权限
/ @, F- M3 w4 F% A[*,8 C9 g" B7 {; L+ i
[*,+ T0 ~# S# ~7 ]) Y
[*,短信接收以及监听权限
& [; ^) V+ H( C% z I[*,
) U4 a6 j$ H4 ?[*,2 G3 T" V* y, W# m% ^9 S) _
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页; K0 F+ d+ s( t6 W
[*,
) O9 f" A2 f7 d4 }: g[*,
/ r: ?, I! O" X5 T: y[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
5 ]9 i7 G7 i0 l: r! _3 B[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.9 d' Q% W7 Y7 e$ q8 R/ P
[*,[font=宋体,所以需要这种方式.
! ]- S6 ^6 b- J& U2 F[*,[font=宋体,在JAVA[font=宋体,中自定一个类/ \( N1 x# {! e
[*,Class MyData
* \5 p) s0 n6 M+ \[*,{
& V/ P9 b# w' ]- a6 N[*,Public:1 K. R8 v( r; t* \- h4 Z: l
[*,Int a;, _6 O' ~6 h6 v' G
[*,Int b;
5 u& I& R5 A9 w. J( i[*,Int c;) @% A- ?9 I6 K* b) D
[*,……..};; ~% Z2 K( _. J8 D* S- t* X
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明7 Q7 y% w8 K g7 G4 ~
[*,public static native void GetData (MyData data);. J' h) t& x. `6 r4 a4 Z
[*,JNI[font=宋体,层中声明
* S7 p6 V. L# _/ v[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata): g/ `+ Y0 m7 x) T3 M' @' ~% f
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
% U5 V% j- H* U8 E[*,jfieldID sound = env->GetFieldID(cls, "a", "I");& P* ~# Y1 t% @) v! i
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值; b, \% a2 v! N6 ^: r0 {' H$ t
[*,env->SetIntField(m_pdata, “a”, 5);* I+ p# Q0 u. u( j9 Q, P
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
2 r I3 ]$ g2 @ Q1 v[*,1 z* h! O/ i9 g' Z' e7 h
[*,
/ i9 x5 E4 k B/ K[*,6:[font=宋体,工程搭建, \% E3 L9 N0 s9 h: P9 ~
[*,[font=宋体,首先编译引擎代码.( ?& x5 r6 t0 |8 i8 B* d
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.7 s1 n- `0 b, [" {
[*,[font=宋体,需要重新 Cmake( A. d/ P" T; E7 o& t5 j7 p
[*,[font=宋体,编译好代码后打开ZSDome! q7 y' n8 @/ L' ^ n
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下+ `- M( W$ \4 F& i/ P& N8 A" k
[*,[font=宋体,然后直接直接运行即可.
% f6 A: |- d1 s; a5 `0 I$ J[*,; K9 j& F4 L/ H; Q. D
[*,对应接口 n' |5 B! H, t* Y7 R! F$ H
[*,Android
! ~$ p6 W4 |0 ~: Z: ]- n; K* i[*,DemoInit----[font=宋体,初始化引擎/ [2 {$ E/ A) B
[*,Render----[font=宋体,渲染主逻辑
3 ~( b- b0 U) ]% O! v2 [[*,
+ M8 U s5 v8 `1 h[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用$ Q! b: j6 G' U
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib% \& J' a5 z+ L- q8 K
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a' D" R& v! A0 ]
[*,
! ?$ V A: p. u0 a+ J; k[*,然后使用:, q& ]- E/ Q- y3 [1 @: _2 S) g
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
+ i- @6 h. h2 S& H3 c5 x! q( R1 u[/list, [/td][/tr]
6 n& _* K. S: x9 u& H( H[/table]
2 R5 G: V/ o) ~9 `1 ~, Q: l0 L# |/ ?) e; V% V) ?8 O6 {3 f* e; I q
: B/ `- w) a7 o$ E. G" x% g
|