[table=98%,
( U% \6 W$ G8 a[tr][td]
6 h( K/ f, ~& w9 y& N, X: l
P6 e! ]3 y4 H$ B3 |2 Z[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,# C) ~% Y: ]. _/ Y! |( W8 _
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案3 ?. \9 a- a8 O1 C( |- Z3 A7 T
[*,0 f$ \' E" G Z) w. y
[*,多点触控:
. i( J( ]1 x5 a' }7 p% Q[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。! y3 Z8 J; Q4 |! {/ R9 Q0 B
[*,原理:
, U- ~ w/ B9 s$ T2 p% D[*,Int pointCount = event.getPointerCount();' [* s4 A+ S+ j4 |. ~
[*,获取当前的点击个数。
+ [$ B7 V" r2 n/ s: A( r[*,ACTION_POINTER_1_DOWN9 a6 X9 P: J7 x4 R" m; N. c5 M2 l( v
[*,ACTION_POINTER_2_DOWN
: u, B* B- p1 S[*,ACTION_POINTER_3_DOWN
$ L9 {6 a7 q) C# r0 D[*,ACTION_POINTER_1_UP; v# i. O% f* e2 B; G' y. W1 e- U+ r
[*,ACTION_POINTER_2_UP! y3 Z/ W6 y0 }9 P/ h. C
[*,ACTION_POINTER_3_UP
. C/ Q7 _4 u6 z( e9 x1 ~[*,ACTION_POINTER_1_MOVE
6 B G9 [! J, S" E) k: t( L[*,ACTION_POINTER_2_MOVE5 C& M- D, ~6 F, [6 P% r% ~
[*,ACTION_POINTER_3_MOVE
, Y. R E [/ o& K% @6 z* f, ~; x[*,[font=宋体,获取各个点的事件响应
+ u! y9 T( a |( ~# W1 X2 ~- N[*,
. }+ w. O3 g% j, n e[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。6 a2 n6 a# E% g: l1 J* F+ h
[*,[font=宋体,同理第二点也一样。$ l* N, m! u! E) z9 N6 D" H
[*,3 A0 ?) V0 _& Y W+ c
[*,2:[font=宋体,安卓生命周期- n2 q4 Q6 @# g+ F* T. Y
[*,[font=宋体,默认的安卓生命周期为点击应用图标
0 x0 f# H: _& N3 R7 E) f[*,OnCreat OnStart OnResume
1 J& ]% [$ g l& P$ y[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
# V) P. u+ s3 C0 o[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
9 t. @/ R+ `+ {6 w[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到9 {/ A8 N) Q& S/ b, d
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;' D: U, ^# @$ C+ @3 v# Y! n
[*,[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,就可以了不要让他走周期流程
7 l7 d$ N6 r* H7 X7 J' Z; t% L[*, Q n: g) t) B* H# a
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
( e8 l) P+ ~% g( ][*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的., y' Q! b# j- d4 T5 j
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.. {" R% U9 d! h+ T, h5 [. T
[*,[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,.
& S- z/ ]$ V6 R. F7 z2 J# R[*,
& X3 o6 f( [8 e6 U: m3 g5 p* k3 M3 N[*,[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,具体写法: k/ S1 E* W+ @* B) e2 ^! J- J
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加7 D; `0 }; D E# N5 c
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,6 C! G) u# j% t" k& B* F) Q9 n
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
' ~/ n: H; t2 A2 k7 w5 z) @[*,android:screenOrientation=[i,"landscape"[/i,>. D% ~7 e) N0 y( n2 F
[*,
. U8 i. m6 _1 Q6 L3 j }# I3 X7 V[*,
3 \/ A& j7 I. [! u0 t$ b/ t) q[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
$ r `$ x) O: \[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类5 c' o2 v" z( v# i7 ?, P3 u( f
[*,
9 ^, g' x, D# j; D2 b' f6 _; m[*,读权限
+ Q% h; l l: o1 \* o1 B- u[*,
8 Y- `5 C2 b4 O A4 t5 u5 H3 o[*,1 r& Z; s: k* ~. E+ t0 C8 j9 @; x
[*,写权限. g* c% B& y5 P; c- g4 G5 d
[*,) @5 d5 ` C% G
[*,
: a$ C" d# f6 f7 W1 Z/ d[*,电话接收以及监听权限3 q1 l6 h2 @1 E
[*,' E5 g$ W! \: P2 M
[*,
# ^: C% ~, X7 M2 X6 Z$ n5 O[*,短信接收以及监听权限
" g- H3 p) \3 p/ ?) L1 Q[*,
# X8 z) D f) `1 O[*,# w# A! C% k h- N
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
5 V8 C4 c1 K. e% o3 B[*,8 D% {3 T% z' I
[*,
0 r8 c. }# F' {! @3 A[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
- e( q/ V% `+ P[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.$ L# w6 n i% r4 y; x
[*,[font=宋体,所以需要这种方式./ n1 d* y; k. u, Y5 c3 L0 {5 K
[*,[font=宋体,在JAVA[font=宋体,中自定一个类% B$ i" j) o3 y6 f4 Y$ B
[*,Class MyData
" x2 m ]5 s5 A4 h7 s[*,{
8 x* U$ S5 I% N' O[*,Public:
* {% e2 r: ?3 L8 ^1 ]9 u) b9 S8 e/ [[*,Int a;( g2 M, U$ O* \6 q; X! G
[*,Int b;$ a$ ~9 y. ~0 f9 V% d( s2 P5 L
[*,Int c;
1 N c; T! k* a2 G9 s2 n+ a[*,……..};
% N! U) i2 u W: x3 A[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
% g7 \7 U$ O! v$ x3 U0 | @; i: V6 t[*,public static native void GetData (MyData data);
2 i, T- w. P) y w& O[*,JNI[font=宋体,层中声明
, v# j. k: U; f, H[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)# X8 |( E/ B$ y7 n) m
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值% l/ ~# S3 C0 W$ u
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");8 Z' B5 [+ W4 l" p h
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值 g m' l6 C3 g5 W; L
[*,env->SetIntField(m_pdata, “a”, 5);
0 R7 B6 b+ E( W8 j% I6 @[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
; j$ m: J' N" f[*,
- U- c O6 `# _" g( ^. C[*,
0 c# r! c+ y9 }# P, d5 s" p[*,6:[font=宋体,工程搭建
9 c+ r( A# l6 d3 |$ ?) o6 b[*,[font=宋体,首先编译引擎代码.
: O# w$ u& \4 }. m[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
) b+ L# M( I0 l! p- D[*,[font=宋体,需要重新 Cmake. b; I# n! p; p, v
[*,[font=宋体,编译好代码后打开ZSDome8 |9 |# _3 Y1 w. |0 h+ ^$ p; ?
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下6 l2 N( Z( {" c
[*,[font=宋体,然后直接直接运行即可.
! F8 b4 ~5 Y e% b q: d[*,9 o+ h1 X% S& v9 o7 b
[*,对应接口8 n6 C9 v2 f' q/ h R u
[*,Android) k( W* O1 o* y1 C7 n; \
[*,DemoInit----[font=宋体,初始化引擎
0 q7 @- w, S& e! z" @* z[*,Render----[font=宋体,渲染主逻辑8 U7 |8 @, W5 e2 [$ ~$ N: A
[*,9 J! Y, f7 F; a6 M- ~# }
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
* }9 L& K: ]7 n. R& z+ A. x$ q) t[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
! p! i4 d$ K+ c# H[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
' ?) p! e5 d8 Z7 Z$ q6 }% D% h[*,
" h8 ?- K8 D( v. A6 f[*,然后使用:
5 s' g% n0 ]& Q[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
C$ a% y9 e6 k4 B: l6 p[/list, [/td][/tr]; O7 V" r6 O# O$ G% |
[/table]5 f$ J" m b6 S# L( }/ l, i* |
8 b( w' b# Q1 q: e: D) ?; C$ B; ~4 I
|