[table=98%," N, o/ r2 ?* }
[tr][td]7 {2 R6 X n( n. @; H% E
" c! ?2 I% ~* p1 }5 ?9 o
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
% [0 M9 J* D6 l* [4 j[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案) g% j# j/ Z8 o
[*,* k7 z8 @. ^1 r- ~
[*,多点触控:+ x' S% y ^' ~& L" n
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
" v. ^4 C" F! x @ w: R; ?2 ^[*,原理:
2 y5 G2 l; p: b1 a4 o[*,Int pointCount = event.getPointerCount();/ s' v( e- |0 M7 \, Y5 I6 { P
[*,获取当前的点击个数。
U3 x& b8 S1 u0 T$ t. z[*,ACTION_POINTER_1_DOWN5 y4 m' g- [+ O- K; W; u
[*,ACTION_POINTER_2_DOWN5 P7 B) C# }! ^- h( Z
[*,ACTION_POINTER_3_DOWN
! T. y6 T6 C( |$ }) f! h[*,ACTION_POINTER_1_UP* @1 _0 `2 u! f! f
[*,ACTION_POINTER_2_UP
, [- B; Y' N% h% C[*,ACTION_POINTER_3_UP
' C& N( L/ X' C9 T) o[*,ACTION_POINTER_1_MOVE
# Z+ c7 H# Y2 n6 ?6 N' a[*,ACTION_POINTER_2_MOVE
* _; h6 f# k1 l% a[*,ACTION_POINTER_3_MOVE
0 K" d3 u4 W" v' a3 U& p( N3 }[*,[font=宋体,获取各个点的事件响应+ I3 `& g7 c: a& N! J W9 \$ ^! x
[*,8 O: {* `/ W# P. X3 s/ p+ R, {
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。6 W( v4 x- r$ q- s
[*,[font=宋体,同理第二点也一样。8 d2 [# {1 s' L
[*,
$ h9 k1 g6 y. K& W9 s! ?8 Y[*,2:[font=宋体,安卓生命周期
; d9 n: y( t/ i- N4 J9 W; l[*,[font=宋体,默认的安卓生命周期为点击应用图标
! v4 F) Y1 d1 k9 Y# A" l$ v7 ?[*,OnCreat OnStart OnResume! I" P, F% O! X) z1 [
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
. c6 a! w, y* L( r[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
8 |- W# D8 ?, y) u! n[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
0 w( s8 o' j3 j( K1 c[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;. o$ K" W$ `+ }' H1 ~1 P% g
[*,[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,就可以了不要让他走周期流程, Z8 C& Y$ I1 n% {; E
[*,
( V+ p* `& e. y3 S; G# X& ]1 Z. T* x[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏. E3 Y9 C# G( ^( B
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
4 G) c3 J6 l; C: C[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
5 b* K3 H: ^9 v0 y4 ][*,[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,.- d5 Q. N8 f- I: B* C! k* Y% A$ B
[*,
( R8 s9 I& l' \[*,[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,具体写法3 V" k# n4 e2 j7 o0 ^9 F+ Y- j; A
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加- M' ^8 P2 c$ D/ }7 w; i, r" A
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,! x" Y. Z( u h! h
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,+ t S0 \" ~; [7 V! K
[*,android:screenOrientation=[i,"landscape"[/i,>: x1 T$ x: c; O" B$ Y0 c7 O
[*,' F* t; }3 T9 a/ V
[*,* j3 L C4 S* c0 c: P
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
9 Z, q7 X* Z1 m' G# `[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
9 S; {6 X- o5 M6 X7 ~( c3 `1 f[*,; Y; l9 g7 p" \( e( t }
[*,读权限9 O1 X1 ?* x. B/ ]! \( G7 _' _9 O& I
[*,
2 u& R& [9 V8 t" k, {( }3 e[*,
. s( w2 u+ ], P6 U" o; {3 ~[*,写权限
9 w# d" s" d& Y4 `/ e: ][*,* x, t. b3 A# ~& u/ \# Z z' ~ K' U
[*,2 D: [1 r2 [( \" n" X9 d( C
[*,电话接收以及监听权限' _8 \6 r/ R! ]8 W# e
[*,
% Z* `/ }) |; ^' r+ x: Z7 P5 Z2 G[*,
9 @# k N; R4 p; _5 _; m[*,短信接收以及监听权限
, g5 e* Y' C( Z: J X) f[*,' r, p4 P9 h* O4 P1 F. A
[*,
% d) [. \2 [5 X- w: a[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页4 ]/ [' e' M9 {' |0 {1 F" Q& D
[*,- }5 D. W3 w7 x. d3 O, e3 o
[*,
! F2 Q4 a& ^: V! K& d* K" G' E+ J[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互& ^( K+ C; B$ v6 l
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.: n7 ^/ F, L; V) \8 F
[*,[font=宋体,所以需要这种方式.
9 z# J$ M& f+ i" `7 ^0 \5 [[*,[font=宋体,在JAVA[font=宋体,中自定一个类
& u8 b; Z# j7 q/ R4 F0 d* `[*,Class MyData9 d. X5 ]# s; l
[*,{
- v9 t. @4 B: m7 T+ y3 `9 O[*,Public:
9 j8 A- L) { ?( y e[*,Int a;. P/ t* e! f% U8 A$ Q
[*,Int b;
( s* {+ s3 d/ k- O[*,Int c;
8 ]/ H+ X7 Z1 C- I( Z[*,……..};1 `; |9 r) c0 Q) G. v: d
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
9 U' u& O# y% G[*,public static native void GetData (MyData data);
3 A9 E% O* x- y# t" o) {- e[*,JNI[font=宋体,层中声明
+ y0 ~) t6 Q; D6 n; O. @+ Y, j% P[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata): T$ M- k8 k# q* c ]
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
4 P! W( d9 G, y# {[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
8 q1 `6 {; X8 w; f" C4 S[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值7 e' d( t8 |, f
[*,env->SetIntField(m_pdata, “a”, 5);
) i; D/ M- g& A5 V[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
8 k; F2 _6 w* j& P[*,5 X' ?0 K6 D; p$ b+ @- f0 c
[*,
+ X4 L# p* ? X$ _$ X" b[*,6:[font=宋体,工程搭建
" \! y& w5 ^, n$ ^8 k3 E0 |# ^3 p[*,[font=宋体,首先编译引擎代码.& n R* m* [8 N* P6 J: } a
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
- m7 {) G. v3 T3 \1 Q- E+ R4 \5 F[*,[font=宋体,需要重新 Cmake
/ G5 N8 H) \" @3 w+ w) U( ^: b# U[*,[font=宋体,编译好代码后打开ZSDome
* A( L8 e8 u/ k* |8 _[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
* [7 T# o! {0 j, @. v[*,[font=宋体,然后直接直接运行即可.9 P+ \8 p( x5 v
[*,
5 |2 O8 p- r7 B- f$ ]0 W[*,对应接口
' W c' c: V0 p9 X0 K; ~0 l7 Y[*,Android& j8 u4 L9 d7 b3 N9 c# p. Y) R
[*,DemoInit----[font=宋体,初始化引擎
2 Y( l# ^4 Z! k# h |7 \[*,Render----[font=宋体,渲染主逻辑4 T* v3 F; s) |$ h/ t
[*,
6 q2 |& ~1 c2 Z3 w+ Y[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
$ u, y# C" Q- \& F" j& i2 e; v[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib; E' `( w: @4 V0 m& [3 |
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
' L2 U. \# B% L' X" `& p[*,3 h; `, M% c1 N1 ~4 v6 t' v( e
[*,然后使用:
7 U# \6 D6 @& Z/ B6 {7 r. f9 u4 a[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
" x9 y% ?9 ]$ o0 p[/list, [/td][/tr]
# S- _# ], A3 K8 M2 Q0 ?[/table]) ^. R W' g0 C& t+ w h; H$ g
2 E, s, s3 c. [2 z' w7 R: m6 H' h6 q, d [8 {! F* d
|