|
[table=98%,
. ~! E6 l( }. q/ x7 |; e[tr][td]0 A, t' r) b0 E
! M& S+ i9 O) s K1 o
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,4 `" Y+ b" p9 u
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
" U( Z" l/ [2 V. n1 S[*,0 v, ~, N* V' w* J! z' n
[*,多点触控:
% q" U0 M! |" v2 |3 x, f2 G9 `& M, w[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。' y3 {3 R+ x; T) G' F
[*,原理:
, S/ g- T$ B S# z6 {[*,Int pointCount = event.getPointerCount();
. ?* `4 w' X; L G6 Q" B8 U! m[*,获取当前的点击个数。6 E/ Q! y% [4 _
[*,ACTION_POINTER_1_DOWN0 v6 z% @( W# a0 x1 M; d5 r
[*,ACTION_POINTER_2_DOWN/ d& p' A+ \0 v1 v, j! Q* K
[*,ACTION_POINTER_3_DOWN9 C; `$ {" e+ G. c, p" j& g
[*,ACTION_POINTER_1_UP
C* K# d+ n7 D4 M; W[*,ACTION_POINTER_2_UP
4 b9 p4 I5 D9 y[*,ACTION_POINTER_3_UP
/ X* m, ]. o$ }. b8 B' F[*,ACTION_POINTER_1_MOVE, R4 q! |1 Z' V; o8 z
[*,ACTION_POINTER_2_MOVE
1 V5 B3 p% M9 ^1 O/ P[*,ACTION_POINTER_3_MOVE
1 `: t% y! _- F2 D1 [# V9 A8 l[*,[font=宋体,获取各个点的事件响应/ q: ~) ^% C0 T+ E0 J h9 N
[*,
1 _# f6 n; J; V8 Y' P[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。# U! l6 O4 c6 p8 v n
[*,[font=宋体,同理第二点也一样。2 S6 L2 u9 ^& i" ?3 L& W; D
[*,- s* A5 L, Z4 W5 ^, Z
[*,2:[font=宋体,安卓生命周期3 ^' H: s3 b; x o+ z
[*,[font=宋体,默认的安卓生命周期为点击应用图标
8 i! @. q- C; a# Z[*,OnCreat OnStart OnResume" |9 v: B) Z0 `3 z2 \2 U
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
( \% h7 R) |; |2 S8 V8 C, x[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.8 w# y9 E/ r2 H( r& b, n+ f
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到5 P2 G$ W; \: \$ I
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;0 X* {8 e+ j; w2 a
[*,[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,就可以了不要让他走周期流程+ f6 h' j4 x- |" |
[*,
0 C0 w6 e3 O0 e* G[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏8 f8 B* F, L1 T; c4 D, E
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.5 z) Q! N, c* e
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
, R" o$ M4 U4 M) M5 B5 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,.1 |0 Y: v0 j' _! H& D( x
[*,
+ x% R# }, A' V9 W* H& 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,具体写法
3 U2 g' v! @2 p[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加% {8 @8 D* x$ E% @0 J3 O, l
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,/ s# ]' T0 ~! ?$ @) J; _
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
2 x# t# V& U: [* R. d+ l[*,android:screenOrientation=[i,"landscape"[/i,>- y+ Q7 t% `) i7 e
[*,
' S9 Y$ |; `% `+ m: w[*,8 R0 K8 O5 p8 P& _" ^+ e; J& q- Y6 c
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
A2 D4 j x6 B[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类 Y2 H8 j1 G, d+ {& Q
[*,
/ j$ R- w* W0 r/ H4 O4 x3 e. i[*,读权限( c- W+ Q) ^# k* p
[*,/ ?9 T0 j* q& ]: |5 o$ Z/ x8 Q
[*,
- O6 d r9 s& G/ f/ J) G9 W[*,写权限% h) g. W$ O* s: d2 n
[*,- c) B/ [5 L: W) _' |2 ]& \! p
[*,8 {: ?% \) {* |( e) M5 l
[*,电话接收以及监听权限
& J% z/ p" W- a& }. B[*,: u/ C" X3 w& l; F9 s5 ^
[*,
- S0 T$ K% e& `[*,短信接收以及监听权限
1 C5 C C8 h; b[*,9 g; y1 {# I9 {( T$ `* J$ Q
[*,/ U1 B& u2 t, P; x+ p
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
9 k6 N: T: Z- ]. Z# i1 y+ k; k[*,+ n8 I8 I G! @
[*,: o7 i, `; M, Q# Q" ^- [1 O! I6 `2 Y
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
& b. ]3 A) A' g3 }' S6 Y[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
9 i4 K* a# n& A- L7 k' P[*,[font=宋体,所以需要这种方式.' e% M6 s; ^4 O/ [. b% P3 R
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
5 `# D x } U$ A[*,Class MyData
, Y, m8 m& d6 d- c3 G* c! w[*,{" |" Y& B% ?' B1 f7 J% v0 \4 w' y
[*,Public:' a# A! Z- J( L9 y$ x$ q
[*,Int a;
) ^" {8 z! P& z& ]. g1 _1 t[*,Int b;% i; S; c9 G _3 y# }; x' Y
[*,Int c;
0 C$ l6 H. U% U% b: c( D0 M[*,……..};" {" ^ |- ^: Z$ b
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明" |4 Z, E2 k% _
[*,public static native void GetData (MyData data);, D! x6 o( X* ~* F
[*,JNI[font=宋体,层中声明7 D' ~& i/ q$ t+ C( m, V; u
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
1 p) l$ @5 J: j9 A; |, O, |[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
4 v3 a9 b1 F; p0 `& T[*,jfieldID sound = env->GetFieldID(cls, "a", "I");/ r! o5 w4 C. k+ ~$ u) q
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
+ ` x/ m1 |8 C6 s. W0 ?[*,env->SetIntField(m_pdata, “a”, 5);* l3 b% h, ^* D0 O
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,./ i& H7 s6 A- ~; T- w$ J& I
[*,
# I$ L) q. r: l5 O, y[*,- c6 S) Z" K8 t- ^; |6 p
[*,6:[font=宋体,工程搭建2 k3 I4 W; V+ f4 d9 q
[*,[font=宋体,首先编译引擎代码. }; d9 q) j6 H" J, l2 F
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
2 M6 B& M6 D4 }8 s' u! ^. U[*,[font=宋体,需要重新 Cmake) R. e! Y, p1 W& g* _. g& c% m
[*,[font=宋体,编译好代码后打开ZSDome( o6 q3 ]% e- G7 {! Z
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下' ?! n$ ]0 F% t+ R9 d
[*,[font=宋体,然后直接直接运行即可.
) N. p6 N# |1 s+ H# S3 E# |[*,
) k& Z4 s7 U4 }[*,对应接口
- s: l# v, q: e ?' C! m[*,Android
+ P7 i% o B- T* d6 a. `' p[*,DemoInit----[font=宋体,初始化引擎6 H2 W5 k3 A2 L; D& Y* e
[*,Render----[font=宋体,渲染主逻辑, u% y0 g! K6 m% h+ e
[*,
1 `/ A/ S. ?; ^2 O( ]2 [[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
% _' z2 `4 K0 ^& L4 ~* T- [[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
8 y; ~$ c, r: J E1 |[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
' [& m) r2 a: T) I[*,
9 k+ o& S# F7 V0 L- K& y$ k[*,然后使用:
4 F9 j- S4 `- j& L/ g. V, z: S/ @[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
! G/ T' e9 C* w4 p[/list, [/td][/tr], d! R6 P6 }1 `6 }1 Y
[/table]5 o- W0 R9 J2 Y% G
1 q. X9 {8 f. g' ]. p4 |" \5 Z; U+ z0 x5 ]$ P
|