|
[table=98%,
9 H) ~% v+ Z+ _[tr][td]
; r( i0 v, w# s- i2 t1 D
$ X5 r5 K+ Q9 y$ G5 O5 ~[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,0 A4 G9 a" Q) d1 U& w; t& u
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
0 b& N, ?$ f- z[*,
' S6 `# I' C- `9 a[*,多点触控:
! _. l$ F; l$ M' H2 c$ v+ g7 s) l[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。; F+ w' U) C4 v8 M+ N0 a
[*,原理: e, ^4 l `6 q1 A" U& y
[*,Int pointCount = event.getPointerCount(); n7 u$ j& E* @
[*,获取当前的点击个数。) Z+ `% g2 v$ w7 }) a2 b
[*,ACTION_POINTER_1_DOWN
. X* M/ I) f5 u! K0 ^- w4 r[*,ACTION_POINTER_2_DOWN& r ~4 a3 x1 h1 b
[*,ACTION_POINTER_3_DOWN5 I% ^& q, d/ t4 a" i( x# ~
[*,ACTION_POINTER_1_UP3 b" y: [) _/ J3 R
[*,ACTION_POINTER_2_UP2 R" n5 E4 v& i, ^ ^- J
[*,ACTION_POINTER_3_UP3 Y' m: U$ v2 U- k) c6 \
[*,ACTION_POINTER_1_MOVE
]6 t/ H' k6 B$ v[*,ACTION_POINTER_2_MOVE
0 a& l+ i* n: {- [/ G$ F' h% d[*,ACTION_POINTER_3_MOVE
# h- @! z/ K3 G9 G4 e[*,[font=宋体,获取各个点的事件响应" T2 L7 j6 j$ f( h
[*,
- S( d! P2 X2 n" W- s& k5 B7 i/ b. d[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。& ^! X0 `; u `
[*,[font=宋体,同理第二点也一样。* Q+ M" D* U- {6 _! j0 G
[*,
0 a$ U: y1 q5 X* y* C[*,2:[font=宋体,安卓生命周期; G) f- d8 A; j5 P$ @2 B
[*,[font=宋体,默认的安卓生命周期为点击应用图标' A( V4 m4 |! u8 d: o
[*,OnCreat OnStart OnResume0 o! e- \; Q7 y0 _& i" _
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory: Y# S0 [; |3 |- I1 C
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
3 L6 j6 E0 j B1 N[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到9 E- n. f1 z+ @6 l. A& z( d; i- a
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;. a% }3 ~$ S. X: T) r; ]& 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,就可以了不要让他走周期流程4 L7 G- A& @3 i6 P6 H: U/ b4 d) ?
[*,( f1 f5 P* h4 ]; P; c
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏5 H. s( P, y# A2 X8 t' R
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
' o7 `' T4 u5 \[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的. A, h% X4 ]* M* e: S
[*,[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,.# z e/ N9 _' ^, c
[*,
2 g- Z! g2 N2 y[*,[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,具体写法; Z3 b" i3 a0 K! q6 i$ R( i
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加6 @) b+ k6 L! i$ n* L
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
: m8 M2 p) x6 h8 j, @1 V5 r* i7 [[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
J# v/ A1 E' g( a$ g[*,android:screenOrientation=[i,"landscape"[/i,>! ]/ A# ^1 p+ C8 K1 c
[*,3 ^" R% Y+ M0 _6 t
[*,. _$ i+ R* R: c1 n9 }
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限/ o7 m) f9 s5 k( |# y, P
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类" V$ u; `1 l1 J/ _+ P$ M2 G
[*,0 h' f2 q4 C/ ~% K
[*,读权限
( B' c/ q, z8 F% N- K! \) U[*,: \3 [& G, G; y. x' F% E
[*,4 E; @2 [& K& {) i# P, ^# f3 j
[*,写权限
4 `7 `2 e) Y# w. C[*,7 ~" \0 q# j8 i6 d1 ~5 d3 K) r4 o
[*,
) \6 f! O! X9 ]- ~6 X6 t5 P: `[*,电话接收以及监听权限
' p0 N+ K$ p; z7 p[*,7 k, p& S) J- d; h- b
[*, k: E. e' u/ i* k5 y. e+ W! C7 ^
[*,短信接收以及监听权限
# f0 j8 c, l( ]* E2 p/ @8 D. y1 Z[*,
& ^. w3 s# |6 [( {* {* l" Q[*,
1 Y# o, c) C1 S K[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页# V' R8 G+ Z: o) U/ p
[*,
+ ?0 {# I* b4 r3 R* w[*,
1 M' [' R0 G' }* `1 I0 D$ {% i: X[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互/ E f8 }/ D' k9 j
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
5 E, t! v0 e8 q# a8 ~[*,[font=宋体,所以需要这种方式." G0 `+ E) c! z6 ^/ Q
[*,[font=宋体,在JAVA[font=宋体,中自定一个类) P& ?, [* p7 _5 E- H7 K2 X) A- w
[*,Class MyData
9 o2 r) ?' G, |; C/ ?/ d+ s: \+ K O[*,{
) a, a; D& A' _3 I% X[*,Public:8 n' B2 t0 U: \, v
[*,Int a;
9 h2 }4 ^+ q$ y[*,Int b;6 }% X0 m4 h G( |7 t$ L! V; f
[*,Int c;; I4 F3 f, F" [# a# A
[*,……..};. `' ?- i M4 q* [$ l
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明. R3 Y0 r4 \" F* @
[*,public static native void GetData (MyData data);" F: }/ ^) U2 `# w( ^8 O7 S
[*,JNI[font=宋体,层中声明/ ^' M0 N+ n. E7 Y2 [6 o
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)2 m$ i& j9 ^" m/ U- @0 o
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
2 |) U7 r& `/ b# f' u[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
0 k `3 H8 o% c+ \" S j2 [[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值* U8 Y: o8 Z3 D# M9 n$ }
[*,env->SetIntField(m_pdata, “a”, 5);
8 B8 y# Y( K+ q' J' f& u[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
. w0 z* v9 p0 T0 o[*,
: D- z' Q' d/ s; L0 M& s: O. k# z" ^[*,
) ?2 q( g! ^4 `' [- J[*,6:[font=宋体,工程搭建! p& O+ H+ i- i& `
[*,[font=宋体,首先编译引擎代码.+ l2 X% l9 K( R! b6 j
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.1 N1 M; }5 Q$ R) w. G+ ~6 |% b
[*,[font=宋体,需要重新 Cmake: l; E3 Z8 O# F V
[*,[font=宋体,编译好代码后打开ZSDome
7 _# k0 M E9 o3 X& {/ _) ~[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下* i" s6 K/ H* B2 j2 A% x& A' A
[*,[font=宋体,然后直接直接运行即可.
& Z& A& o5 B5 c2 \2 D) a[*,
0 m- w" p7 S; k: P/ {' c" M[*,对应接口/ J U! s% t: R" b
[*,Android& z; o6 x8 L; A5 R! L
[*,DemoInit----[font=宋体,初始化引擎4 [; E/ O. @. F. j' k
[*,Render----[font=宋体,渲染主逻辑
8 V) D& c0 L4 L% `/ V[*,! @4 V4 h/ l, \. f$ w3 _
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
( E# a9 O* `& K9 N, ?' [# f[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib) N3 V6 ~ B$ I4 a8 ]
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a5 S4 B: y7 f9 {4 w3 l# \& n
[*,5 L! R, S, m* }2 L9 u
[*,然后使用:; y2 @; J' |) z0 U4 ]* v$ r' q
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
+ e$ C& Z! w% z# I% Y5 R+ I[/list, [/td][/tr]
6 ] z, ]' I8 T8 z[/table]) n+ Z s2 N( T
1 _6 g; A6 G& N7 }, A
$ Q2 k6 _( j/ D7 f6 {& M |