|
[table=98%,/ C, i2 `' R! D8 | }, y, Q% Y
[tr][td]# E% I, I: x0 Q4 @. x
* j: }- Q! t+ N# e' x( s( L
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,% m) W. v; B2 s9 L: y7 F
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案% H/ q, ` i4 Q
[*,
/ V$ O8 ]& j T1 u* W$ {[*,多点触控:0 v/ J) p+ H/ T# b" Y* F
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。% |( j! P# S" R' E9 T
[*,原理:$ [$ X$ O- f; F$ l5 U8 ` k0 S
[*,Int pointCount = event.getPointerCount();
2 n" k. H4 R( [: I8 y$ _[*,获取当前的点击个数。& [. V1 k2 u6 t0 @% R
[*,ACTION_POINTER_1_DOWN
; I; {3 A* c0 Q# f, `[*,ACTION_POINTER_2_DOWN
1 C; [7 [9 w, A' @' j, s[*,ACTION_POINTER_3_DOWN
7 ?; Q. D3 ?: R1 Z2 V% G; c, v[*,ACTION_POINTER_1_UP4 {& \- _$ g; o
[*,ACTION_POINTER_2_UP
, d! ?: a, ]! o. w0 s6 ?[*,ACTION_POINTER_3_UP. l8 w8 E" n3 f+ D; e# E; N3 M
[*,ACTION_POINTER_1_MOVE6 L" o6 D& ~$ D% V
[*,ACTION_POINTER_2_MOVE: {: w& Q7 }8 ]" z
[*,ACTION_POINTER_3_MOVE/ l4 I$ w# ^" j* g; U5 f7 }( T; h
[*,[font=宋体,获取各个点的事件响应1 M0 M$ `6 x7 O$ D
[*,
: f8 F+ A/ Q' x1 e* P6 }) c[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。6 z+ H! V4 ?- g, _0 C2 u
[*,[font=宋体,同理第二点也一样。
; r l6 A A W& Y* n- k[*,+ I! }: E% n) N
[*,2:[font=宋体,安卓生命周期
6 W/ t8 e3 `) k7 ]7 s9 c[*,[font=宋体,默认的安卓生命周期为点击应用图标
6 T( e* m# F. k+ U[*,OnCreat OnStart OnResume% D) o* V+ u( t. t9 ~* X
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory9 p- Z/ |% ]/ `, e
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,." d$ K' _( R1 a! |
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
7 j; p2 E/ s% i. }9 P) v6 I1 D% J[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;) U( p" x' w. p, D
[*,[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,就可以了不要让他走周期流程) S* h+ x/ \ ]
[*,
/ I A! l! ~- r( b9 T[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏 b& i" f; f3 L9 B: }; E& x
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.* B8 g0 d- c2 C, j
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.3 X* d- K9 R+ `' ?4 U2 e( b6 y
[*,[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,.
0 p. y. w4 q& z" N d. K8 S[*,
8 |3 Z9 X4 X o7 U" D: X7 e[*,[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/ _% }9 E# x7 |
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加0 s0 \7 `8 ~' C2 v* H
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
/ C9 S- c6 M8 ]1 Y[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
9 @+ G3 X) m, D1 r[*,android:screenOrientation=[i,"landscape"[/i,>
* o! s! q" a$ g" j[*,, d4 D/ x" x: X3 {4 F( J1 b
[*,* l: F: g U: B1 @) q/ e- L) X" x
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
! ]/ B& P6 V+ ?3 L, l[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类" n# F$ }, {" \/ t, q. m
[*,
h- @8 ^; C5 k* K6 h$ m[*,读权限
& r& c. `- \" U* \4 t2 p4 S[*,
3 i* c4 C* y/ n [9 o/ e/ f[*,
" ^2 P, X! a8 l$ }2 P[*,写权限
$ u- U0 V$ |$ A' s" h+ c[*,
/ C$ i0 k! J8 W3 B+ k[*,+ Z! ^3 t8 L4 Q; t# j
[*,电话接收以及监听权限/ I% {+ f0 i; A- y; w' i! ?
[*,1 I! V8 A% k' P5 e' ]% w% f
[*,! O; T* ^& }% H" [
[*,短信接收以及监听权限1 }9 `' Z! ?5 @5 B* O$ @
[*,+ O( Q% X$ Z5 m7 Q9 R* y
[*,' a! o# K, j# G# _" E. A
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页+ M9 @( S; U) h
[*,
9 O6 N& z1 D0 @[*,
* X5 m0 I& c- q4 }* q% e[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
3 V4 W6 s, f0 n5 h: [[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.1 P. B; V- N0 y4 w+ z [/ R
[*,[font=宋体,所以需要这种方式.
0 ^3 u8 m: O$ ]$ T3 k. ?% c* T# x0 M1 H[*,[font=宋体,在JAVA[font=宋体,中自定一个类- `! I; F) a, `/ L3 B3 A
[*,Class MyData5 r3 d$ z U3 H( d6 @8 Z
[*,{ K5 ^7 H0 X+ ?
[*,Public:
2 a) D6 j6 i s/ y# y[*,Int a;& n0 e! U B4 H
[*,Int b;
& A$ l- }! b. V[*,Int c;; I. F q' k& F% y! ?1 `
[*,……..};' D3 O7 Q p+ ^ L9 x' F9 T% K
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明+ V0 O2 ^. e3 O! b& d
[*,public static native void GetData (MyData data);
5 s8 T: B% P: z[*,JNI[font=宋体,层中声明! O- h+ h+ E- s& U- ^6 W% Z
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)1 {$ i* O+ _% q0 M. f5 H. {) O
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值2 q' Z$ M# a3 O6 n# Z) `2 Q, d v
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
* |. G) G7 O2 ^# A& z5 r" |; S[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
4 [0 A5 [" q d8 y# }8 j4 M3 M[*,env->SetIntField(m_pdata, “a”, 5);0 B6 s8 R+ S3 ~0 C
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.$ V! y8 j& U# {) u- U0 y6 O& p
[*,
/ x7 d4 H7 J& X1 ?# z3 Q5 }3 |[*,
# y, f7 D% U' G' w[*,6:[font=宋体,工程搭建$ P% D6 b' u- o8 ^
[*,[font=宋体,首先编译引擎代码.
8 _1 }' N, n) N! M* K1 D" S[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
( H- r4 t! m* v[*,[font=宋体,需要重新 Cmake
4 Q' _$ f! J5 J3 M. L2 ^9 `1 i* y, ?[*,[font=宋体,编译好代码后打开ZSDome! v. b3 C3 W& Y5 o
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下( o4 O9 z. _. `* T# b/ z- T7 z1 C
[*,[font=宋体,然后直接直接运行即可.
, w6 n) K* d3 X: }0 [; r[*,
6 T3 O/ {* u0 B/ X( S9 w1 L[*,对应接口& [& _9 j" l. T
[*,Android% C1 P2 {5 t( Q j$ t+ K, {
[*,DemoInit----[font=宋体,初始化引擎
6 `- p- K" m( m$ L$ J: }) r+ J5 ?[*,Render----[font=宋体,渲染主逻辑
# H/ p S% W6 `2 p8 p3 Y2 O[*,) J6 ~: d0 }/ i
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用8 P3 M- V% ^' S' v- }: K$ G
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib) W7 _ O; u: j0 ]6 {5 I
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a- a0 I# M& o, f# Q2 S4 [; w# o
[*,8 V- |4 C. s1 s
[*,然后使用:. |: N, D/ O/ Y7 n) z2 ?( u# b
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()7 E& R) C% y7 }) F% X" y: L; {
[/list, [/td][/tr]
* j7 O8 y7 f8 D- m7 S[/table]& T* b- K& `$ Q1 [" _- t
9 v6 A' L0 H/ E6 B6 |( I) j% g' R+ U( _* ?- Y- N# {6 L5 i
|