|
[table=98%,9 Y3 {3 E- o8 C& H1 r
[tr][td]* [4 C' b. s3 a f
2 H0 Q6 K6 ?" [% I[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
. M2 I1 r( F- [; i, s' K2 O+ E- B& j3 K[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
3 W" }4 p9 m) X: Y$ O8 {[*,. Y5 ?/ D6 H7 r6 A
[*,多点触控:
/ j2 ?9 E; @2 E+ b# K* ~3 i0 {- ?[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。1 g* g* ~# v* R
[*,原理:2 ]+ l0 c+ m7 x) h3 ?3 y: {- I/ D
[*,Int pointCount = event.getPointerCount();; b9 B# d; z% [' q
[*,获取当前的点击个数。
# f. V- C) K% c6 j[*,ACTION_POINTER_1_DOWN/ q- ?0 s4 ?8 ~ N9 t
[*,ACTION_POINTER_2_DOWN1 @) h% T$ J/ A9 l# _: v- B* q
[*,ACTION_POINTER_3_DOWN; G% b8 ^0 p4 p7 Y
[*,ACTION_POINTER_1_UP
1 Q5 N" Y6 |7 @4 g9 p[*,ACTION_POINTER_2_UP# q* ]4 Y: q; B1 B) M
[*,ACTION_POINTER_3_UP. w; W7 ?( B' L/ ]* f$ J9 U
[*,ACTION_POINTER_1_MOVE. d0 Z6 p; w9 h5 t* i( [8 V
[*,ACTION_POINTER_2_MOVE% Q$ J: Y9 v$ Z6 X0 M8 R
[*,ACTION_POINTER_3_MOVE
: s( P) t! @* O$ U: C* b[*,[font=宋体,获取各个点的事件响应5 V3 D; Q; ~, J
[*,+ Q) X0 Y8 L8 k& [ S( f
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。: C& _# X* k$ q/ S
[*,[font=宋体,同理第二点也一样。; [* N- }% S0 _" m: r7 ?( e
[*,
( F6 r7 O0 \/ o4 f) O$ I3 b[*,2:[font=宋体,安卓生命周期! c, r2 x" \) c7 X4 q1 t3 g6 P2 y
[*,[font=宋体,默认的安卓生命周期为点击应用图标
% o8 _0 S- I9 d[*,OnCreat OnStart OnResume; @3 A, t- H8 Z: c% K
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory3 u5 E# c4 {+ @( a1 G: [- a
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
, h8 U% c5 P1 r6 d, |0 D[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到( b$ D9 L3 O* L, a* q& h, ]% Q
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;. I* c* {% v2 k
[*,[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,就可以了不要让他走周期流程, y8 H+ b3 M: H, g$ u
[*,* z6 q1 d4 [- h7 s8 o9 r
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
% J0 V9 P! ~! X! [5 G[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
( T' a1 K1 Y% W S, }$ x5 c[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
' z7 F& `5 S* n" [[*,[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,.# H+ ?- L& ~, k
[*, B& j8 j0 B6 g8 `) ^
[*,[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,具体写法
( Y- j( r! ~0 w( V$ K% J[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加" |8 e' [ z S; G
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,/ q0 D d) y& H
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
$ X9 _) G2 n N, p[*,android:screenOrientation=[i,"landscape"[/i,>
6 t) Y) B( e$ [4 _[*,' j$ E8 U' M" C
[*,
& |0 Z; E" c5 u7 e[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限7 s# B5 F3 d% I5 W6 B0 Y
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
2 v' V! {1 h; r7 l1 g[*,( M- [; _. V! L; O: v& n5 v
[*,读权限7 ^; N: l( @ y& C" ^
[*,
7 ^/ t( k' U6 X2 k! C! H( }[*,& G: x |+ t4 A" T/ V
[*,写权限: S( n1 a; p# c; _. E7 }- s
[*,
8 O& z: O* c/ e6 G$ E[*,* `: d) n* n) ~5 m7 m
[*,电话接收以及监听权限
( ~1 f7 W6 K+ o( a# l[*,
/ l$ w+ F) J1 c* K# Y$ p! [[*,
2 ^" ]. h6 z U/ i0 s[*,短信接收以及监听权限* Q! K; p( P* M! y/ a2 D
[*,* s( }; K; k/ Q2 q) f
[*,- M7 Q9 S) C; B& t, J) I
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页 W- y3 N8 s8 E# p
[*,4 t# y# A" L! M2 B" O5 h
[*,* Z: f9 U6 h* H, Q B
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互5 f6 ^- _9 V7 S9 |7 a
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.! s1 ~' y, H8 L9 w, }
[*,[font=宋体,所以需要这种方式.8 y# c8 t7 G! C% Z
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
; r7 d9 d6 Q7 I' X6 [7 x- Z[*,Class MyData) ~; l( Z P0 T1 N/ H( {* c
[*,{* [0 s' ]$ S8 p3 R: |9 b9 s" T2 H
[*,Public:! n5 h& j$ N$ _# P# M2 _: w
[*,Int a;. o5 I' g7 |5 w' [4 k8 ?* t0 r
[*,Int b;* t: R( z3 P+ w
[*,Int c;' p' p1 A( w3 r
[*,……..};2 V0 e' J: Q2 F+ l
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明5 s5 v% f; n8 l
[*,public static native void GetData (MyData data);
6 C- F5 @3 i4 c1 m" d[*,JNI[font=宋体,层中声明( ]0 b) J( |8 C9 N$ v
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
) Q' [& i3 F( K' [ T6 g% P$ C9 W[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
5 c! T6 V2 L8 X8 w" y[*,jfieldID sound = env->GetFieldID(cls, "a", "I"); s- x0 x3 ?. {4 _7 \
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
: k9 O: ~' s3 T[*,env->SetIntField(m_pdata, “a”, 5);
$ l: C! k6 U! J$ {4 r[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
& k& X6 N$ q, S$ K1 }* a[*,
1 _0 k2 ^! e( _; K[*,6 N1 f4 ^! ~+ {' ~; w* \& B
[*,6:[font=宋体,工程搭建' A/ q0 ?8 T% L i0 K
[*,[font=宋体,首先编译引擎代码.
m2 z0 j& M; ~1 V: z! j2 ][*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
) r. G" |4 g% i6 `[*,[font=宋体,需要重新 Cmake2 K2 f1 Q. [+ x! K1 k5 p; J* E
[*,[font=宋体,编译好代码后打开ZSDome" @! V8 f- ~, ]( L' w
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
4 h! Q3 E- p0 Z# I5 _) A[*,[font=宋体,然后直接直接运行即可.% J6 ?+ e7 K; c3 T
[*,% N" p% r3 p5 e! n. w
[*,对应接口
, d+ a. i1 R! q8 e+ ?[*,Android# ] n" C% i; ^5 Y2 Y+ Y" R
[*,DemoInit----[font=宋体,初始化引擎+ E' z5 h( `1 _" g7 w6 n
[*,Render----[font=宋体,渲染主逻辑. U& ^- K/ G3 {3 h; j1 A+ ^. u
[*,4 a- y+ Y! S1 L. i
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
5 y; u( U0 J$ N+ L( l" `, B4 Z7 d[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
& |0 G( u- R/ j) S[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a( v- C0 g9 ]4 V! v" q
[*,
7 I( v7 Q1 K" O- L( e[*,然后使用:! X5 y |/ \. O) i4 V5 y
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
4 ~: [8 w6 n& C y$ a/ i% ~[/list, [/td][/tr]
" \% A3 S( m0 \4 Q: M) n( Z# k[/table]
4 n3 t1 b9 B- I
- S, p5 y; _- f3 ^5 L' y/ o& T! m- T9 K" c& Q# W( Q, E
|