[color=#939ead,[list,
; y% r. Z8 Q$ H9 @[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案. _ D _+ ?! b: {
[*,
$ ^! I7 o! ~- H3 R2 ?2 H& D[*,多点触控:
1 D' G7 x4 M3 u/ v1 q[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
4 o+ T9 ?4 J8 z. s1 B, K[*,原理:
5 \' S" ~& t7 z" W, b1 E ?4 T( f# U[*,Int pointCount = event.getPointerCount();3 ~7 l: m Z6 l% }! Y
[*,获取当前的点击个数。
; J: R* Y1 _% R. I2 ~. j[*,ACTION_POINTER_1_DOWN
; }5 T6 N8 x# S7 } i5 [[*,ACTION_POINTER_2_DOWN
$ A: i' I/ f" F[*,ACTION_POINTER_3_DOWN d3 g: C' i3 o' ^- y3 N
[*,ACTION_POINTER_1_UP
" D# |; b0 x+ O* D5 d4 l r[*,ACTION_POINTER_2_UP" R8 F5 m: w0 F X( A0 j6 @7 B" a
[*,ACTION_POINTER_3_UP6 f" B0 k8 v" U4 ?% q) B
[*,ACTION_POINTER_1_MOVE+ v" D9 L7 |6 m0 i4 r9 I* T
[*,ACTION_POINTER_2_MOVE! F4 ]7 S9 p! A9 ^) `5 s
[*,ACTION_POINTER_3_MOVE, U0 T) }3 f- ^7 r. {
[*,[font=宋体,获取各个点的事件响应' ^4 Y+ U( k7 x- ~/ S, o( v( S: V' e
[*,
i# F& p$ `& v( s7 H/ Y4 Q/ X/ k[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。& @9 z3 [3 z/ a. i1 d' W
[*,[font=宋体,同理第二点也一样。. e- }, O L) j1 c$ r' p
[*,' i& M9 Z4 H+ H) t
[*,2:[font=宋体,安卓生命周期) T3 i! r; Y9 @+ ^& k3 A! r; ^ |/ E
[*,[font=宋体,默认的安卓生命周期为点击应用图标7 g% W) `3 ^' a1 Y4 f% F$ ^
[*,OnCreat OnStart OnResume' v9 t5 _1 y6 w. u$ L- n
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory, k: R; e' A f4 `" H8 [; L0 r
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.% G! x" o1 s5 Q7 a9 i
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
; W* L) S# t2 z% `; y[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;: u. U, L9 J" u' \3 d* 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,就可以了不要让他走周期流程
, I3 M3 m. G- a" x3 E! J3 r[*,8 b+ E) X U1 s1 H m
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏) s9 A3 S# p! O% B6 b
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的., J) u. R) U% g' G; A& E
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.; O+ S+ _4 e( L" V) _3 y1 M
[*,[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,./ m7 j/ `/ @/ p. k) r
[*,0 d8 z a: w# G: I! i/ j: p, H
[*,[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,具体写法
N$ S3 Z5 ~/ ]$ x# R1 x& J: e[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加& K7 U- @5 A4 B" `, j6 L, S: [$ }
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
. M+ P1 I! J. V7 ?$ D6 `[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
% s! i2 O$ M3 b2 v* T: O* j) }* M: e3 z[*,android:screenOrientation=[i,"landscape"[/i,> S" ~( x2 e+ n; k
[*,
9 H+ I& E$ }& D* y# Y; ?' Z8 ?[*,6 k2 L+ B& z8 ~1 N: ^8 @% |
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限( z6 M$ v$ N$ U3 e) q
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
0 z( b& }; S, |1 A[*,/ r" w, T3 p( y* {* q0 h5 [
[*,读权限
% @* h2 ~: j3 F& Q' O[*,, Z7 ]0 _$ y6 k w& C$ O! N$ n# G
[*,, }/ `% b, s0 \+ x# n4 b
[*,写权限
) C2 P& Q2 J7 u[*,
, w7 A1 _2 r+ ]+ q) p[*,3 \8 _) t2 h& X; C! n" z( B
[*,电话接收以及监听权限
1 J+ {8 Y/ U4 F( Q9 v3 U! U[*,
/ _& F+ I( p: @" l8 s' N3 x/ @; @[*,+ T( v; j8 v' u
[*,短信接收以及监听权限
! w, Y0 m% w! @/ d' {[*,) G, p/ ?* s; y2 k& d- P' w
[*,7 b: O0 v+ c- J
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页; Z: s+ O/ d1 _1 X# W: f: o( c
[*,
% P3 E) f s4 Q3 W' E& }$ y[*,
! O3 G$ K- N' T3 u6 t% m( K$ x; T( S[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
6 B0 \/ _3 V* O8 C X[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
& W4 ^/ q+ z1 R[*,[font=宋体,所以需要这种方式.5 L; V/ ]: O* u* w0 i
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
9 D7 Y( J" j, `; Z! i* f. p+ v[*,Class MyData
/ t% n( e2 `0 Q( k" }7 F[*,{# s% O& R' H+ d: a
[*,Public:1 y2 D0 ~* q! K$ E& B; l5 q
[*,Int a;) @( P! f: l& T: i4 R
[*,Int b;7 D% y! {2 o( E% g
[*,Int c;
& f5 \* u2 S, C* x i C. y[*,……..};) Q( k5 C @5 a+ ]" R
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
3 \+ D+ c9 R' q# }" T[*,public static native void GetData (MyData data);) v, N0 _9 [1 m+ j. V1 N6 U. M
[*,JNI[font=宋体,层中声明% ^/ n' D9 a N) g
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)% U7 \ P$ G! [0 F1 l
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值- i) j5 S& O6 ~$ D/ R/ r
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");. |! Y+ @& I- M. K' D* |6 n& U
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
; J {; Z+ O( _) I/ U[*,env->SetIntField(m_pdata, “a”, 5);3 B0 u7 t6 `/ Q
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.) `& q8 t: w' O' b
[*,
8 T7 x. ?. G: {, {. Q& [0 \[*,
, x% ?- c1 j) {' |( W" [[*,6:[font=宋体,工程搭建! Z% E. A. x' O# n; w/ Q
[*,[font=宋体,首先编译引擎代码." l: v3 p W+ a: H
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.. c4 D4 Y* _# ?: ^; J
[*,[font=宋体,需要重新 Cmake& O O5 `" f3 Y1 ^' G& t9 C
[*,[font=宋体,编译好代码后打开ZSDome
+ |+ r7 R! _2 y: M" X[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
: Q, h' @- J( O: g8 M[*,[font=宋体,然后直接直接运行即可.2 x2 h7 y: @, a
[*,- ?% t$ i1 W' o% {7 n) c6 ]& F5 V
[*,对应接口
# G8 O8 \9 C5 E1 H2 P0 l[*,Android
9 g3 v) F/ p& o3 U# q7 L& T1 R7 Y[*,DemoInit----[font=宋体,初始化引擎$ _. r" `2 `: Y, E8 c9 n
[*,Render----[font=宋体,渲染主逻辑
+ r* Q% H" |, @) C$ j[*,+ D9 D2 W& V% F: t! S
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用* k$ D1 g; v3 q
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib8 ^9 R- v. \, I" P
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a- t, h& j# L M
[*,, u5 r% n* N9 ?9 L
[*,然后使用:
. K6 b! z# b z[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()' A, j; Z" I% l
[/list,
[/td][/tr]