|
[table=98%,. C7 m5 ~2 j7 |9 e, X8 m
[tr][td]
' A! m' e1 A. k- ]& p' @" d% f+ Z" d% f& O& f8 d. t9 O
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,7 K* s6 y' z: ]6 M3 ]. x1 g% b
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案2 a6 M( X. b9 H" \' s8 ^
[*,- s- R# j5 M1 k; [' d y O* a
[*,多点触控:3 y+ M7 k; w% P9 _8 `
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
' }0 A+ r. `2 \) ? V[*,原理:
) q# p% z0 e0 @[*,Int pointCount = event.getPointerCount();4 y9 a! y. v5 W/ \$ y5 \& v4 F. v
[*,获取当前的点击个数。
" A% ]1 m) ]# a& s[*,ACTION_POINTER_1_DOWN
8 P3 ^; w z, v8 P- G/ a/ g[*,ACTION_POINTER_2_DOWN$ c% P6 f) O- |! K' O1 c$ L
[*,ACTION_POINTER_3_DOWN
/ \0 `- o" Y: c4 j' y[*,ACTION_POINTER_1_UP
+ Z7 c, C- ], H r/ `: N8 H[*,ACTION_POINTER_2_UP
, T& W; u1 g% U; D$ |% k% @7 l[*,ACTION_POINTER_3_UP2 i6 ~) W7 W& J t6 F
[*,ACTION_POINTER_1_MOVE% w3 o2 L6 O/ Q# t1 s
[*,ACTION_POINTER_2_MOVE
# i( G) h2 o* K1 p- X[*,ACTION_POINTER_3_MOVE$ c* p R5 T4 v+ {
[*,[font=宋体,获取各个点的事件响应/ V/ z. Y [5 z
[*,
& K5 I g0 o1 x' E2 `[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
! t8 z1 s7 o+ l- o% H9 D+ D[*,[font=宋体,同理第二点也一样。; _* m/ r1 o4 n% u+ E( s
[*,
0 |! i4 A/ J5 `3 B+ L- i[*,2:[font=宋体,安卓生命周期 x+ H/ E$ ?; [! h+ S; I
[*,[font=宋体,默认的安卓生命周期为点击应用图标1 p1 C- j. a( O9 I- i6 K% K2 A
[*,OnCreat OnStart OnResume) `1 p1 P }3 P
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
; L8 E% ~$ j( y$ ~$ ?4 n[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
6 U/ h+ {- X& U, g[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到6 C5 j! R. q$ i! i0 n' L
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
9 }: | s# G& n3 {. x2 P[*,[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,就可以了不要让他走周期流程2 {& j0 b$ v! s; u: S; D+ Z
[*,& x7 ~* s0 h' v7 Z! F
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏, W4 [$ d4 f4 J
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
& w4 ]. `: f* z+ ~/ O+ M; ~' ][*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
' W+ r6 }0 O( ?1 l6 j[*,[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,.( t" v) |+ Z% k7 l5 K' E5 F
[*,8 B5 \9 ~' ?1 ?* e( N& ?& n
[*,[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,具体写法
$ Q4 {9 Q% v) n( [, p0 \& \[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
7 R4 w8 D/ P- v9 X& x[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
% r& k, X3 K$ m[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,' |/ K1 \( H& j- m! V9 P: F7 C
[*,android:screenOrientation=[i,"landscape"[/i,>
+ Z# ?9 A$ O7 c" [1 x7 v+ B& }[*,& `0 I% i$ ?# I/ }; g F
[*,
, G! Z/ e, n' W2 r7 e3 s% N H. f$ T[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
! k9 O* B& g1 X[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类9 w& ?; ]/ B7 s7 F d8 O
[*,
) ~& H7 y) ]# i" b" F[*,读权限
1 s* r; @- Z8 o& b& \: y! v[*,
9 H2 N' W% v& N$ W# W+ _4 a' `[*,
5 u3 _6 f6 F8 s( R- n[*,写权限/ F: f( g& n# [0 M) X
[*,
+ v+ @5 Q7 w/ c8 u[*,: V% m3 j7 u7 g, x
[*,电话接收以及监听权限
: b0 X: D& d& q, K[*,
4 p; { `' T( j5 ~8 y+ Y[*,
# }# [% v; _1 e( _[*,短信接收以及监听权限1 y' o) f+ s' {' z2 ]# Z" p% M5 ^
[*,
4 o9 Z9 _8 j- x5 }. B! V) ][*,
6 |2 y6 |1 f) c$ R% f6 G[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页; ]7 r* g: U+ `# J2 O
[*,3 h' ]! x: A* Z% G0 y& P
[*,
* }! L- ?) D3 K) u7 ?[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
& K; ~6 ]& B% {, U$ s9 m _[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
" N! s6 Q' N4 R5 L0 a[*,[font=宋体,所以需要这种方式.
# h: A* G! M9 p& f: y, s. N[*,[font=宋体,在JAVA[font=宋体,中自定一个类" l4 P1 N; x' Q
[*,Class MyData" ^9 m6 c" K% K* }/ n* F. q
[*,{: ]# b8 c- ?6 ~- B+ E
[*,Public:6 o* r/ _8 _/ f$ D6 N5 N
[*,Int a; |. H" t( @, ~5 n: r
[*,Int b;6 w! P( ?% T/ m# s6 D1 l* Y ~
[*,Int c;
6 ?$ W. W! F9 _3 l" C7 |6 C[*,……..};
# z2 @& ` B1 C9 ~2 j: T+ I, N[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明8 ]7 C' j$ i" ?4 p7 B
[*,public static native void GetData (MyData data);
; {- E& B! M3 p4 o[*,JNI[font=宋体,层中声明% i# C7 Z" j& W8 L. b0 v
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata) N; F, X3 M1 M
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
0 D9 K: n6 V# ?8 N; x7 `[*,jfieldID sound = env->GetFieldID(cls, "a", "I");- P6 Y- Y& i: ~
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值$ ?# p( [: i9 M3 g- V; e0 d" X7 i
[*,env->SetIntField(m_pdata, “a”, 5);. L$ S2 ]3 a+ q, c/ L
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
& X2 H# b- x8 u/ p( k# Q! E[*,
. M; H K, A* G- F1 W k0 h, D[*,
/ m% J, H+ J- s[*,6:[font=宋体,工程搭建
5 [' u& Z+ ~6 m# L. Y[*,[font=宋体,首先编译引擎代码.9 P9 Z/ G" {# L) i2 X/ b h* O
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
) @0 q! o; i! Q* j) k( z& Z. p7 H$ T[*,[font=宋体,需要重新 Cmake
% U! |$ u( W9 U/ {1 I[*,[font=宋体,编译好代码后打开ZSDome- i a+ H. L) j6 R/ ~7 w
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
$ r$ ?% _& _. T$ `% P$ J[*,[font=宋体,然后直接直接运行即可./ i- _5 s2 R' q4 @) v; r/ I+ b" |0 w
[*,6 \6 x: p% B* W, l
[*,对应接口" I- R+ H, t/ H2 k+ ]7 W% U, ]3 T
[*,Android
. p4 i2 r' M( f2 r[*,DemoInit----[font=宋体,初始化引擎: f- [3 A7 z H7 _+ E
[*,Render----[font=宋体,渲染主逻辑
2 L6 L$ i! W, v. B8 O[*,7 O0 b( s. w: a, ? B0 L
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
" K9 E$ m' ?. O/ |[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
" `) x' g% ^7 J5 V, N5 W8 m' ][*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a4 u% R' K# f- x# R* P/ k ?
[*,
+ B8 Y! R. ~' @, g0 M) n: x[*,然后使用:8 z- `- J% O. [! H' `. _' h
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
: |% p% V( }" D[/list, [/td][/tr]
# E, y# X# O: W1 f& H G0 a[/table]# o: m2 k! M' n+ T
% ^& X- ]. m9 \& D6 [( z, e: v5 H+ K2 f' ^% I
|