[table=98%,
2 t' n( ?$ d1 M9 k$ S0 {[tr][td]( B4 ?7 d- Z3 L
8 M- a$ Q1 I2 i; y7 T% [7 u. d7 ]- L[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
; b8 b m% b. ^( r[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案. q1 i5 S+ L+ W" C5 y0 `
[*,
0 L! b' Q7 t3 p2 k" _, f[*,多点触控:
4 q; j/ v/ \3 e[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。: d8 V7 T2 f0 U) n1 W8 `) D
[*,原理:
- V% d/ ^6 k# E7 U$ d2 s2 f) N0 A$ t: C[*,Int pointCount = event.getPointerCount();. b, r3 }4 U, Z7 `* S- X
[*,获取当前的点击个数。
, X5 S9 X+ o! K, ~, K' ?2 g[*,ACTION_POINTER_1_DOWN/ o$ r5 J5 `5 s# x' A7 I' b
[*,ACTION_POINTER_2_DOWN
) F& N. y* J8 E3 @) D+ l3 \" m; `[*,ACTION_POINTER_3_DOWN/ O/ f- ^6 p7 N1 H
[*,ACTION_POINTER_1_UP. {2 r3 b2 S6 u" d# d) D1 x
[*,ACTION_POINTER_2_UP. j" M7 g. C) W* E( Q
[*,ACTION_POINTER_3_UP: U- P& J& ~0 O; W1 ]& U
[*,ACTION_POINTER_1_MOVE* V: e; e6 v5 p( t
[*,ACTION_POINTER_2_MOVE
8 h; N1 g+ v. a- y/ w( S[*,ACTION_POINTER_3_MOVE% a# d! k; |. ]% v7 f
[*,[font=宋体,获取各个点的事件响应0 B9 Y. b* H* r+ F
[*,6 E* K' H. w8 c* ^
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。' ?$ Z0 O/ v4 I( a
[*,[font=宋体,同理第二点也一样。. x# d; S/ O4 s$ N
[*,( N" K# _: @5 V5 G# n
[*,2:[font=宋体,安卓生命周期
$ ?/ U/ {1 U! U2 j7 U3 T# Y[*,[font=宋体,默认的安卓生命周期为点击应用图标. q0 g" {8 @/ d9 O% ^" O
[*,OnCreat OnStart OnResume% F" T0 u9 w) h+ S, a$ y$ k
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory6 `9 h0 t: s$ P& L2 C+ @6 h2 k
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.) \, L9 E* P5 e, l2 e3 E
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
# T' p3 M3 l0 @1 w2 t[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;; j$ R9 [1 G4 |# ]7 _; n& e
[*,[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$ t9 ~8 V( [. B' B
[*,
1 U2 e- K) }$ }5 Z! V6 X) F" D[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
. w9 A/ o3 _! K[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
$ n9 h9 f( d5 v! |$ D9 g[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.' q# s$ ?: d1 ]6 R0 R
[*,[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,.
/ J8 M: q; J: l4 W8 G$ u[*,
1 u7 F( l( s/ u[*,[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,具体写法) {- l4 a. Z P+ V
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加3 M1 D/ N# l0 \6 N0 W4 ~
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
; l" H5 _0 T/ V[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
; B# `9 z6 u i5 Y- s3 G[*,android:screenOrientation=[i,"landscape"[/i,>/ Z! X4 B3 K5 A* J
[*, Y* d, C' \* v
[*,$ w" i; A& `: G5 n* ^- x
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
* C: g+ ]: ~9 Y- X" h- s6 R[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
6 o5 e9 G( X! c0 K* O) }0 {, m, T; b[*,6 a" M. h& T# t! G
[*,读权限 c* g& H6 r( P& l3 `3 b8 o
[*,7 T. a! ^) y% J* ~. T9 C
[*,
5 l e. k# ^! `& `' X3 D[*,写权限
4 F7 P' `( b) a+ N1 Z7 q5 P7 J. ~! \[*,
, h* B! S4 M* L, e- k[*," v1 Z7 o& K; N9 Z
[*,电话接收以及监听权限' x8 j% ^: q6 e( }" C
[*,2 e: D9 K( R5 L% w v' l# U
[*,
8 _+ `$ o6 e3 l8 O3 Z _[*,短信接收以及监听权限
% M+ O9 O$ }: X( Z# d[*,
7 g0 l/ L) S9 r0 X[*,& W( j; j) \' ?% O" u- e
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
. ^* o& D0 k* r8 ~5 o[*,* w6 v# K8 s R4 i5 ~1 v) \
[*,
, k: O" W+ |% q p[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互; s* J c1 Q' K% A, ~
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
% [8 f& s2 ^: A$ ][*,[font=宋体,所以需要这种方式.
) g% m3 f8 h) x7 P4 Y[*,[font=宋体,在JAVA[font=宋体,中自定一个类
# C2 n( `' w- k[*,Class MyData
8 p' P- O9 V/ H& j1 Z9 |4 b% X: v[*,{) `. r, V5 c0 ], ~
[*,Public:7 \) r1 O- p' Y* e# s. F& [
[*,Int a;
7 A, _3 H+ k- a8 P8 s6 Q D[*,Int b;% ~" E2 x# _' D+ `! g
[*,Int c;: K! | O0 R2 u/ X2 }
[*,……..};
9 ^$ C( O$ R% F# ^) C- j0 W[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
9 X6 M# r; s6 B# G u[*,public static native void GetData (MyData data);; x* @+ X3 S8 b7 c; W$ H% a6 R
[*,JNI[font=宋体,层中声明
|% z% N! `! t% n# Y1 {, F[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)' B4 @- R8 O1 J" z+ }& Z6 s* `
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值; c9 f% c) K/ X6 ~ B6 A
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");3 a0 v n8 E7 @1 a$ I
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
/ {' [$ m$ m) Y) y* q[*,env->SetIntField(m_pdata, “a”, 5);
$ J! f) ^" P, J6 X[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
: \" `0 X9 S x r2 ?[*,
/ c* B/ X0 i Q/ J8 y[*,9 ]1 L6 X( \6 y. C a. M
[*,6:[font=宋体,工程搭建
1 h$ T1 B( Y" f8 p. H$ _[*,[font=宋体,首先编译引擎代码.' T) E1 o5 k1 m8 P
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
! Y' |2 W5 P8 _& X9 }[*,[font=宋体,需要重新 Cmake3 m: B3 e* ~9 x! K' A
[*,[font=宋体,编译好代码后打开ZSDome9 X* V1 q5 n; u& V1 [
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下/ L8 W0 @5 X- W& x# R* I2 ^& b
[*,[font=宋体,然后直接直接运行即可.
! P( |7 h+ r0 v( Y8 _3 h[*,
. Q1 J+ c8 ]+ e: @6 g! \+ H5 f[*,对应接口- W6 u' C' i- f8 I6 ?2 u
[*,Android/ L a3 E3 u h- y) J) t& l0 ?
[*,DemoInit----[font=宋体,初始化引擎
1 p* U& h4 H$ |5 n[*,Render----[font=宋体,渲染主逻辑! Q# o V/ B% U
[*,& A: P E! R8 w2 M0 D6 @. H
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用5 s; @; F4 |+ X+ C
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
2 p; i. W( E9 q& h[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
# A4 [9 P& k- `8 f8 s1 u. e[*,2 V. X6 Q8 U, r+ W. F
[*,然后使用:
; V4 S1 \. v2 @, E3 w5 l4 V- A[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()' q6 y2 q) J' s0 A
[/list, [/td][/tr]
% f1 t/ D9 I5 m" N2 M[/table]
+ B* H2 w, {: @' Q$ w( t& B0 [
; E$ B% R; f$ W. w' [: F( I) J+ l$ q; z0 v9 `' U% A: h- J
|