|
[table=98%,2 x: v ]" r' S
[tr][td]
1 J' v7 r' G2 _$ K- k" t* i& A" a# E6 J! K* U. a4 @0 O
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,& ^7 [& b. y6 |7 W( b; k
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
8 W4 d) ^$ p2 \, i, _; z/ h[*,
% i2 {1 D+ I; ~% L1 N[*,多点触控:
# t' k/ M) T, p8 E" O! g' v[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
6 c" {% s* W9 r[*,原理: u9 D" |' b) K I" I( i1 [( C
[*,Int pointCount = event.getPointerCount();8 L, J4 ^8 s3 |& _2 r( z* q7 f
[*,获取当前的点击个数。+ [: C) K+ c7 v' A) b3 m6 L/ Y
[*,ACTION_POINTER_1_DOWN
- P4 z2 p( h% P O9 d r+ Q/ W- m[*,ACTION_POINTER_2_DOWN
+ c" Z7 M% F% \* t8 r. A/ ?[*,ACTION_POINTER_3_DOWN5 F. A# F9 S' H1 Y* F) h: q
[*,ACTION_POINTER_1_UP- v7 l' S Q0 S. }
[*,ACTION_POINTER_2_UP
$ s* l: Z+ c E( j9 U0 ][*,ACTION_POINTER_3_UP+ |; @5 O( T0 l! W5 ^7 u
[*,ACTION_POINTER_1_MOVE
+ r; |8 {% V) O- S" k2 }[*,ACTION_POINTER_2_MOVE. X5 M# h5 t( p
[*,ACTION_POINTER_3_MOVE
% t( R6 t7 M0 c* K* d4 e[*,[font=宋体,获取各个点的事件响应
# G: e7 z- I% R& I[*,3 f! K9 S# v9 H* c" r
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。: o& m. o {6 K" I( ?
[*,[font=宋体,同理第二点也一样。
3 ^% M' a9 `; s$ @" c- z[*,
4 S$ j9 `. C! G[*,2:[font=宋体,安卓生命周期
4 f/ |/ d' t7 U" [[*,[font=宋体,默认的安卓生命周期为点击应用图标: y8 X' W% r, I; h
[*,OnCreat OnStart OnResume
9 k' R z" t, D+ ?# S[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory0 g* v7 R1 [/ D0 f/ C) q
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
( Q$ C' G5 ]# E$ J[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到0 g$ b; l& } O) U |/ t. C
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;" f$ Q) |+ h4 z* v3 u/ A, Q8 R' s
[*,[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,就可以了不要让他走周期流程
`: Y5 d4 r1 l0 Q1 f[*,
* H4 p2 |9 A+ w5 {: ~3 H[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏' J1 |8 E. w9 I
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
1 m# C+ P0 _. n8 f[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.6 v5 z1 i! ]# F4 A5 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,.
( N3 f5 F4 ]8 `) C3 x0 S. Q9 A[*,
+ U7 c$ u% h# Q! {7 ]; t[*,[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,具体写法8 C: }: D/ I l x0 r8 v0 j
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加. L5 \) k H; M
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,6 \% y8 w6 l( c& F
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
9 o% J+ E# |+ ?; ][*,android:screenOrientation=[i,"landscape"[/i,>
1 ^5 [3 O _& ?5 u9 E+ \1 K[*,
/ n8 q& N1 s/ X: E. b& q7 n[*,! U7 C3 o! O5 k( t9 {& S
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限3 W1 M3 [, ~) l4 F3 W; q3 X& y
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类0 I; r2 A2 @% L% a$ S; D
[*,
/ @# f& ` H6 Y[*,读权限
8 N# G. D' D- B, h V( C6 e( L[*,
, A' [2 }) J8 _5 g: r+ ~[*,* a" m* b4 ]9 A$ [0 L5 g
[*,写权限- [1 {& g7 y" b6 ^
[*,/ q: a: c2 A( f2 }* \& y
[*,& M% x. T- Q3 k3 A+ X1 B: ^- r: P
[*,电话接收以及监听权限1 U; s& e: g, z/ b y9 P/ s
[*,& z+ \2 ~6 m) z
[*,4 E) U6 D/ W$ p$ [' U
[*,短信接收以及监听权限3 ^7 G0 z# d7 s0 Y O% c8 l; m( I
[*,
+ b, W1 z- z! H9 x( W& D[*,% v% e( t4 P/ k! I2 i
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
9 K1 [2 F" f1 v2 G o( r[*,
4 b7 [" g3 g; G7 R$ c1 Y[*,' s7 B3 Q) J" D. K" }( h" a
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
9 Q6 _, H/ ]0 ?* Z. Q5 k[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.* [8 k4 D( c+ K$ i' ?8 W! v, R
[*,[font=宋体,所以需要这种方式.3 q+ y% n% _6 \+ Q3 E
[*,[font=宋体,在JAVA[font=宋体,中自定一个类: g* f. L2 j8 v2 z# ?8 w
[*,Class MyData
% t X* A/ y5 H9 _% P' k[*,{: I6 _) ^9 W- O4 W0 G* m
[*,Public:3 W5 [' E' W% F. R9 b" w
[*,Int a;
7 \9 ~* j5 v) D% o1 g[*,Int b;
7 I. M' g% B0 V[*,Int c;
# Y7 K, d- g# Q, p9 W[*,……..};: x5 e' }7 \% C- j. z
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
; O( M+ A7 W) B4 Z/ z, M! K[*,public static native void GetData (MyData data);; g1 Q* [( ]) U" i
[*,JNI[font=宋体,层中声明! S9 v- }4 F7 X, M3 _ p
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
. a& ^ k: x( [1 W[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
! h8 {. d. ]% L, a6 S[*,jfieldID sound = env->GetFieldID(cls, "a", "I");& s5 J# D* x2 F+ v0 n4 |
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值$ |5 A+ O f9 W0 d! \
[*,env->SetIntField(m_pdata, “a”, 5);
, `8 d9 L1 U: a) I+ y9 l[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
9 u. @. s- P! A3 p6 E[*,
8 x& o/ j0 ?: m2 z* J$ d[*,
% b' B$ r( i s- `$ R$ U0 u. Q[*,6:[font=宋体,工程搭建
# Q' t4 T( F6 n8 y7 }4 c u( h[*,[font=宋体,首先编译引擎代码.
8 Q- ` l( j; B& N2 _[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
. S8 g3 I" h2 u$ \0 Q) a[*,[font=宋体,需要重新 Cmake5 V3 `4 A0 Z" S# Q) F( W
[*,[font=宋体,编译好代码后打开ZSDome0 ?$ I- S8 {( U+ h3 {
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
* t# C ~% D0 |" b ], O[*,[font=宋体,然后直接直接运行即可.1 K* e. `9 K% Q0 ]* K c2 H
[*, s4 S( n/ F1 ~4 J
[*,对应接口* j6 z& o# l- }3 v
[*,Android
' v! g' X; ^# ~) `$ n# {1 c. z6 h[*,DemoInit----[font=宋体,初始化引擎+ Q7 ]1 f) `7 g% |/ e& j
[*,Render----[font=宋体,渲染主逻辑
, Q# u& i1 {' @7 G& ^' \0 K[*,. a. d$ R1 ~% E3 e1 `
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用0 s# [2 ~3 ~7 y8 u6 {* X
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib- I6 V4 g8 d. W( O$ V
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a, h- C/ x: n |1 ?' p
[*,+ G3 O# V7 s2 M. H2 n9 z5 A
[*,然后使用:" T$ _' O# F& O; i E
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic(): u Y2 s& x! o: d, q
[/list, [/td][/tr]
4 E2 ~5 k6 {3 ^) Q, r. g[/table]
0 l: v; D' f# i# Q$ G$ N) ~" q" k; {. n* A" ?
. a2 |$ I: n8 }; Z+ M
|