|
[table=98%,& F5 n' m- R9 S; g9 |" [& k
[tr][td]) J0 @0 B9 w: N5 n. |$ s: a
f8 t; s. i5 ]; R
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
9 h$ U6 W, U5 j8 y% u7 h[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案' C; `! x' W/ R! Y* ~
[*,5 Y( D" M# z; J
[*,多点触控:
- _4 A5 _! r" M[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。/ G7 `$ J0 F [8 O3 J( A0 }
[*,原理:9 U6 i& A1 V/ b. b; |
[*,Int pointCount = event.getPointerCount();5 a5 P5 j% H! s" b* y( S" H
[*,获取当前的点击个数。
8 h+ v5 s3 C2 r; F7 q+ k# r! D[*,ACTION_POINTER_1_DOWN
/ \7 ]7 q& U1 n5 G, L[*,ACTION_POINTER_2_DOWN
, d" w9 j1 \; Y+ q3 w[*,ACTION_POINTER_3_DOWN1 @ Y9 o; c% t3 C4 C. i. ?
[*,ACTION_POINTER_1_UP
+ M2 l B. \# c% o% A[*,ACTION_POINTER_2_UP
0 o2 |& V" L _) T! r[*,ACTION_POINTER_3_UP
o9 G. r9 [; w4 Z7 b[*,ACTION_POINTER_1_MOVE: V8 i! x( M% [$ D# U
[*,ACTION_POINTER_2_MOVE
( z, u- e i1 x2 |9 o[*,ACTION_POINTER_3_MOVE M8 \! w' V) U" Y
[*,[font=宋体,获取各个点的事件响应
* V* v. z; M; [) A[*,0 H l# O- X8 |; a7 \6 [; N& d
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
& F% }# Z' b5 S[*,[font=宋体,同理第二点也一样。' A0 h- E. b3 q+ L% `9 ~( k
[*,
; K% w3 A4 @2 w5 U: {[*,2:[font=宋体,安卓生命周期
6 J( J0 \* z9 j$ \! ?[*,[font=宋体,默认的安卓生命周期为点击应用图标' G! a- Y* F4 q! k# u6 v$ {
[*,OnCreat OnStart OnResume
r1 U8 M7 |7 i$ X, x[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
# e( Q8 q5 e! \7 T) y8 T[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
7 R3 V4 N$ W! b( J% ~[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
# a; v# A" ^- d[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
! a# I# P$ r1 M1 l* F[*,[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,就可以了不要让他走周期流程
! m$ p+ k \2 M" U2 R[*,
9 {4 E3 |0 |$ {" O, n ^6 g' }[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
: `, g# L* D* j% C4 i, H[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
0 l6 w) G! ]& T[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
, ` k& P2 y- |; w4 h6 ?0 n/ f[*,[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,.0 Q+ q6 h" j! i8 `9 M
[*,
! ^9 o5 L- J" c2 C/ w* c6 u[*,[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,具体写法
0 z9 Z+ ~$ u0 j& o- s, q" s[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加# H* l/ z3 A! I* P+ X) R3 [/ b
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
4 Z; F4 G. O- o# D4 m[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
2 A6 M$ S* E3 ]. @/ t[*,android:screenOrientation=[i,"landscape"[/i,>
0 N9 w1 U- X$ X2 \[*,/ N8 ~9 G8 A* c* ~' ~6 ~, M1 e/ l
[*,3 C% F: j( P& G9 @0 _8 F
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
1 ^7 d+ Y+ v l( R& C8 s9 ^[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
# X" @5 T( y D5 m; x6 |: l[*,
L9 W4 A. i3 m N. I' B4 d( k8 @[*,读权限
/ b6 {' K! `" y3 b5 |5 t0 U7 H[*,
/ b1 q3 j, M9 }& o1 L4 y: X[*,) A# n* S! ]! m. l+ z! U
[*,写权限4 H3 _+ B" I8 {* E- N
[*,9 o% R1 i6 Y* R
[*,
& y4 y. m1 b$ @[*,电话接收以及监听权限
$ O. i1 w6 Y$ V- i[*,' R$ O8 | Z0 _7 \+ B
[*,
/ q, P0 \1 N. W% _" h3 X0 F[*,短信接收以及监听权限5 z) Z. ^! Y" o8 A: y3 T& l
[*,: {" T" f3 z. R# A' X
[*,
2 e; @$ F+ ~& N+ z' K[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页! V1 ?4 I& j% S1 I
[*,7 P. K. N3 w* f, r3 h7 R1 h9 \
[*,; m1 c+ }+ H- V# g5 u
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互3 h4 `2 J0 I. q
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.# }$ e8 M, w: l. [) A
[*,[font=宋体,所以需要这种方式.
/ s% `7 x0 f% p% a( o5 L0 V[*,[font=宋体,在JAVA[font=宋体,中自定一个类
+ y6 k% H' h9 r$ Q' I[*,Class MyData. V# }6 l) d, k ^1 q2 r9 J4 P
[*,{( ^: F, L& _2 d0 \
[*,Public:( W3 z5 G! |" m" \% ?
[*,Int a;. x9 _2 ^% f0 Y9 i8 [
[*,Int b;+ h, M7 W* t& E) A
[*,Int c;1 r5 q# N" O1 W; U
[*,……..};5 D9 p8 k& C& h) f- E; } o
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
/ A9 q/ {% K+ P; x; c! ?2 S [[*,public static native void GetData (MyData data);; @$ d) Q9 j* R
[*,JNI[font=宋体,层中声明' Y) t4 N/ h2 J* {8 [) q
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)9 s+ R! V" l- p! C2 _, k
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值' w. |5 M0 _9 |1 C2 s# |% Z
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");' d, u6 b+ Q0 w
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
/ Y3 M6 Z+ z' G6 i( E1 Q# t[*,env->SetIntField(m_pdata, “a”, 5);
3 a# E. m6 P5 |' T% U8 F* C[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
9 s0 h1 e7 o) ]6 Y0 W- _6 B& L* e[*,
( I5 I0 l H3 ?# X/ H[*,
+ R$ r7 p/ ?5 ?( N[*,6:[font=宋体,工程搭建
: k( a# d" z, t. r. j[*,[font=宋体,首先编译引擎代码.
# r3 r+ }. u, T4 E1 |' m- O[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.6 d0 o- z# M; y
[*,[font=宋体,需要重新 Cmake
, }3 F' a. k5 f. k[*,[font=宋体,编译好代码后打开ZSDome3 M6 w. S0 f Z% b
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
. R* t! L+ o# T" R2 o, P K[*,[font=宋体,然后直接直接运行即可.( a( y3 K5 H8 Y+ N! B# `* ^" R
[*,# E5 g, |! k9 w R; u
[*,对应接口" i5 Q) H P i1 I" t
[*,Android+ o }! d; L+ G4 I% I
[*,DemoInit----[font=宋体,初始化引擎* x% L% g& E! t. z# U( T' m
[*,Render----[font=宋体,渲染主逻辑3 {/ f2 w( a+ E# [: U! R
[*,9 ^0 C9 A$ X/ ? ^* }
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用1 B* g; b& d r. f6 w
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib# G. O: }& G. R/ O/ g; c
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a$ a5 o6 a0 n$ y7 h8 W& T
[*,8 p# Y- `3 h9 @1 p& q
[*,然后使用:% _7 x# | z; w% _
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()& c$ K5 y9 r- H( K0 X E. k
[/list, [/td][/tr]
5 B& F3 `# ]8 F. p[/table]
, z+ C5 L( h& @4 Z) V8 Y
( Z7 s3 z$ [2 u h; j9 F/ r% |% k/ c: U) h
|