|
[table=98%,2 H5 r) @1 }! w% n1 h
[tr][td]
0 k" N1 A6 H; V
C `1 ~, {& g S, g/ ?[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list," j q' \2 X' E. {! R& z+ ]) S
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案- _- J& \9 i( b5 n6 N8 u
[*,$ ]% f* w" l3 G0 J8 D% c
[*,多点触控:; D8 Q" H: O# K0 X* }, o; S: k: A2 I
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
3 _; F7 g2 Y) r4 c9 _4 ~, L) s[*,原理:
' I7 C# l4 {6 p& I( v4 F4 ][*,Int pointCount = event.getPointerCount();
" {5 K& ~1 {# ?# v[*,获取当前的点击个数。* @9 L0 h+ O+ z0 `3 P, i4 I3 a
[*,ACTION_POINTER_1_DOWN
& G% ^1 ~2 {$ e2 x! T: Y[*,ACTION_POINTER_2_DOWN' a4 ?; e3 g i/ C
[*,ACTION_POINTER_3_DOWN
. o3 D5 Y$ Y/ y& ^! U: R% D[*,ACTION_POINTER_1_UP+ t" w, R) J: `- J0 ^9 q
[*,ACTION_POINTER_2_UP9 X. G' s8 W$ M
[*,ACTION_POINTER_3_UP3 j! \, p$ E& |( S4 E0 j7 z
[*,ACTION_POINTER_1_MOVE
6 R3 E. _3 C) p2 J0 y" @[*,ACTION_POINTER_2_MOVE. D) W" s: _6 R- y
[*,ACTION_POINTER_3_MOVE
( o$ T4 \8 z: m& K: P' I[*,[font=宋体,获取各个点的事件响应; n+ r' ~6 r# V4 X7 d; t
[*,7 y: Q; T# W. _
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。6 G* e0 x1 x [ s& r) @
[*,[font=宋体,同理第二点也一样。
3 k: R& R( h, m[*,8 E0 e# @# g; b* `
[*,2:[font=宋体,安卓生命周期' c# a1 \6 w* e% f. v
[*,[font=宋体,默认的安卓生命周期为点击应用图标
4 l% r" S! _# c' g" `* d8 ]) F[*,OnCreat OnStart OnResume$ ^! y4 n4 y5 {2 |0 V
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
! T. x; g4 r1 I* k5 S% f- S% Z- P3 t[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
) c2 L- u5 f. P% ~& G# e% f[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到- q9 K" J5 V! q+ @" K1 S
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
# }/ b9 F V4 Y[*,[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,就可以了不要让他走周期流程
0 Q8 D- [& w$ ], W6 `# |[*,
/ B# u2 `% w7 e! J' ^[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
; ~2 q+ h& J2 `6 C$ t5 }[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
& y8 Z- S1 M( ~" q0 o5 x[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.6 D/ E# O: [0 q, B: ~; O0 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,.
4 P9 a* I! j- A: n$ o[*,
3 r9 O+ x' i: Q- o; k7 Z[*,[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,具体写法
! m. Y; x! a8 M; ~* F1 ]* G[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
' a/ Q m3 i) o6 n! n' N[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
) m1 C6 @7 G- q0 \% B) ][*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
8 g* n H' \& M# P* q7 i/ I `3 ~[*,android:screenOrientation=[i,"landscape"[/i,>
; F9 u. e" C. j[*,
: {5 i: v9 m! o9 A* k[*,
7 J3 j7 b- s% g, x( p- z[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限5 e- G! G, [, ?0 R
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类9 D6 h% H a& X# u2 q2 D+ t1 E
[*,- q5 c# y3 q! M
[*,读权限; F5 x/ ~8 K q7 x9 a$ x$ D6 c& v6 Z
[*,9 [8 ?# ?1 x, x, D: W( M$ o
[*,
* h: R8 o# w7 H/ ^* u4 _[*,写权限4 X/ I# W' U# M/ |2 ?
[*," s/ |4 l$ N/ ]; s7 ]2 J
[*,
% A4 r# ~; n6 c- ^) ^7 S3 n. M[*,电话接收以及监听权限* q" u4 N5 p. M L& Q+ L
[*,
' L* I5 O+ O7 H, B' i) P# L[*,
, G0 s, n: p# i+ R2 W9 C[*,短信接收以及监听权限+ q) Y( D! C s- Y7 }1 b2 W) a
[*,
! E1 I& f E; ?5 ?: z[*,) n! m3 V/ z: Z" j
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页5 n2 t9 @- ?/ V( H; J5 e) w v0 `1 F
[*,
) O& q; i9 B' S, g7 ], R% `& J9 c1 n[*,3 W4 O) y; H" w7 j) _
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互* P b$ X) R. p6 Y) k
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
; q% h9 H- k# l[*,[font=宋体,所以需要这种方式.. c. J# `/ Z& z" } N: F, w' Y6 ^
[*,[font=宋体,在JAVA[font=宋体,中自定一个类! y$ l6 s. ~% M( @5 X! U- E
[*,Class MyData
; o! S( z" J4 H( F( N4 w[*,{; O n2 u& c: P: \
[*,Public:
5 w/ g' e2 ^& l2 \/ R$ Q[*,Int a;2 a+ F' a7 z0 r( E0 \' z
[*,Int b;" ]- Z V m7 m9 t% ]* q; z* Q
[*,Int c;
?1 A$ R$ a& i1 D" t* n- O) M[*,……..};
* d# Q' x' W1 {" r& v" n: \% @[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
; @- E: s3 N" G, U7 u1 m) B[*,public static native void GetData (MyData data);$ z: c3 P( v+ ]$ k" [/ ^/ M
[*,JNI[font=宋体,层中声明4 E& N. {# h& s% D6 v5 }
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
) B {7 ^, _- v8 b) i* E' g[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
3 ^9 o' J9 H5 [) l[*,jfieldID sound = env->GetFieldID(cls, "a", "I");8 T& _( p1 }# {# |
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值) z6 k7 l. ?7 q2 M
[*,env->SetIntField(m_pdata, “a”, 5);
, t8 t* |/ T7 e2 n1 L[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
+ t, c' j! K6 ]. E4 \ k[*,
2 U! N2 D: [% V8 \[*,
5 j' B. i( x8 f, p[*,6:[font=宋体,工程搭建. @) ^. T6 b. D L$ {$ h l
[*,[font=宋体,首先编译引擎代码.
# E3 M9 z0 B' |2 q# Y8 |[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.. @0 G0 V+ e" U3 K% |* V y
[*,[font=宋体,需要重新 Cmake8 K7 C7 d2 T; l$ L0 l; M
[*,[font=宋体,编译好代码后打开ZSDome2 O i: D4 }2 J8 x; `) I" @$ N6 g+ P
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
) h/ I. N* K1 m4 O# \! V5 w! e[*,[font=宋体,然后直接直接运行即可.4 v$ B9 f& ^: c6 X6 P
[*,: Z! E3 m1 \, Q$ U0 N7 N! h
[*,对应接口) R' i' [0 g o3 w7 }. A
[*,Android
( E& p7 v# y1 ?6 B2 G# K[*,DemoInit----[font=宋体,初始化引擎
' ^( e5 |/ o% L5 C6 n[*,Render----[font=宋体,渲染主逻辑
# `( _' e% o* R) f2 ^& k+ k) r[*,
6 v3 f* W% L& N! J3 ^[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
" A7 `( @8 \9 Y- ?[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
, S6 j- \/ _8 M' q( w[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a# k, a' `" ^) J, m- g
[*," l6 z3 s3 G9 l9 X7 b
[*,然后使用:6 q# I9 C6 Q- U5 O
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
. W o9 Q# H: V4 O# f/ B, h[/list, [/td][/tr]
7 q; z& w% R% k2 j, I, V[/table]
& w3 \1 M4 A1 h: M7 v1 d a
- M. P: g6 R: ]: {" o
) c; x8 t4 G! q |