|
[table=98%,. |, Q% u; {2 F1 H: g" u6 t
[tr][td]
" G0 l4 H+ ^# i! n9 q$ a4 d/ Z# N+ e& o- M1 G1 H/ G
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,3 S0 @" k. D8 X3 a
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
- U; W2 i, b5 I. Z0 _[*,+ m& g; H' A4 t
[*,多点触控:; I# |4 N. L4 Y+ t$ |& s
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
7 h9 w( e* Y! f# q4 J1 v6 A[*,原理:
* q5 g. K2 p; r7 A[*,Int pointCount = event.getPointerCount();
# C, o/ r! T0 N# U[*,获取当前的点击个数。% L; W. k* `: V1 t; [. W
[*,ACTION_POINTER_1_DOWN& m( S1 a; u3 p6 V
[*,ACTION_POINTER_2_DOWN
, `5 z8 s4 b0 W! o[*,ACTION_POINTER_3_DOWN
3 p0 k" ?9 V( H[*,ACTION_POINTER_1_UP# k8 f8 Q+ m- S: V- P
[*,ACTION_POINTER_2_UP! H3 z: O0 z+ U; e
[*,ACTION_POINTER_3_UP9 N& Z) A* c$ z+ e& _* Z7 f
[*,ACTION_POINTER_1_MOVE
3 t2 W- W$ B. c" [) M[*,ACTION_POINTER_2_MOVE# q& \/ u* y! ~' s" y# j- L
[*,ACTION_POINTER_3_MOVE2 i' A) L; ?3 R& _+ r; r
[*,[font=宋体,获取各个点的事件响应
5 [) z1 ?7 ~, L[*, Q6 S2 m* w. k) I: h
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。% w+ V2 F @# L; U# r
[*,[font=宋体,同理第二点也一样。) K" ~% h9 v F, f0 y
[*,. Z1 ]0 ^$ }$ ~+ _" b
[*,2:[font=宋体,安卓生命周期7 H- @# Z4 C( {' H
[*,[font=宋体,默认的安卓生命周期为点击应用图标
1 Q% m8 X) Q* \% ?- P6 z g4 {[*,OnCreat OnStart OnResume" l- _; u& r/ x* y& f0 _- T% G5 O9 H
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory! a/ c: k- p' g4 g3 C# n; x5 J5 @
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.9 g0 ~7 ]4 h( j, {# d6 w; O( j
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到: G2 m+ F m2 K2 t& m f7 c2 G' O
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;0 t) [% Y9 i1 c
[*,[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,就可以了不要让他走周期流程$ X. A4 q# F. Z* J- z
[*,( v) Y9 _) W# a
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
4 x" t: L- g( l* I[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.1 T" Y$ j$ m- N
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.4 m) o; D# U9 S" D- Z
[*,[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,.% Z$ R- y* [# u& d: X0 G
[*, N' j5 {+ V& o1 V6 k7 ?
[*,[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 Z8 X# A, N7 x. b( `0 X- H# o[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
. O: |4 z# L, J8 b" b[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,5 y' _+ P4 R4 K+ ?# C1 o: s
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,1 n+ B4 j5 s' Q
[*,android:screenOrientation=[i,"landscape"[/i,>" }6 A# @$ g$ {) h1 D1 L
[*,
# {+ ?7 H" j) o4 I[*,2 b: x( T5 X& E. P
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
5 c( G# x! E4 V' v+ ]2 T# V3 z[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类% s) d8 ~ P. z- |6 R& J" S
[*,) Z4 y5 l/ S2 j% U2 T1 n7 u
[*,读权限3 V8 e/ E9 O- r7 @
[*,7 Q t- R5 C2 }! m6 {$ |
[*, U, D. V9 p. `( n9 M: Z
[*,写权限
0 Z; c: i- I7 F) W6 j, Y[*,
' Z8 r7 h9 h4 l8 a2 V[*,# J6 B8 x9 r ~ m" j
[*,电话接收以及监听权限: L" D8 \# l3 _; e: d0 n& j w
[*,
/ E) A0 Y: J0 u0 ~[*,
$ s0 E. Y. u* Z* R[*,短信接收以及监听权限1 B' P8 s9 ^& w" b
[*,
% J, j0 C+ ~, G4 |# W* o& v[*,8 D$ Y* }% S1 F
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页" T* H6 }7 Z0 S4 u- c) J" Y9 {
[*,
: v" n, b0 d( N[*,$ p3 d' r- H- M6 F4 y
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
# K; u, `( U2 b0 x4 }7 Z, T[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.( Z! s1 O4 _+ q4 G8 \* A
[*,[font=宋体,所以需要这种方式.9 h/ o+ r( D- f: T) P9 T
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
; t% N7 i/ s6 m2 [8 G[*,Class MyData r, ^5 B2 S6 `9 j* {
[*,{
4 D: e6 W U* w# h' q[*,Public:* r, i" b% C. P+ R
[*,Int a;
& G& |" u) S2 b( d' j[*,Int b;0 Q8 J& O5 M6 ]' a! t
[*,Int c;
5 e' ?9 B( T% m& m9 \; ^$ @[*,……..};* T, {/ k6 O6 s0 _+ k
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
% E) p# Q9 K1 q1 J* a( \0 z. ]* e[*,public static native void GetData (MyData data);+ M( b0 D) P- X( Z
[*,JNI[font=宋体,层中声明
" H, I _; H) S# W3 ]& }- \( ~[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
; B/ o* s, N. o; O) G( j6 j[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值0 p9 z& _: `; @7 F) g
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
# G( v; c( B% T& e[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
) F3 ^3 {3 T1 r+ f" v[*,env->SetIntField(m_pdata, “a”, 5);/ s% c4 N5 h8 i( y! o0 R0 Q
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
9 n# J5 {2 ^, i9 a: ^4 ^: C" {[*,
: _ m& ]3 d& N9 V0 M* ~[*,; Q9 l! I% V! H% V! g, e& d
[*,6:[font=宋体,工程搭建6 W- S V1 E; l* j$ q% `8 u v
[*,[font=宋体,首先编译引擎代码.
9 y5 q& y, @# I; }6 N' l; P[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.4 K9 e# h0 N8 J0 c
[*,[font=宋体,需要重新 Cmake
|. J7 J v: m6 {7 w9 ^5 V[*,[font=宋体,编译好代码后打开ZSDome, H- c' B3 a- g- h' N
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下. [& r0 Q' ~' V; o2 V
[*,[font=宋体,然后直接直接运行即可., M! F6 Q4 p) C
[*,
1 c' z; H( T2 p1 j" g[*,对应接口, p6 u, H3 u+ f$ n; f
[*,Android
9 G2 T- w, N- S& `0 Y% H[*,DemoInit----[font=宋体,初始化引擎
+ `1 T! K* v, C+ [2 P[*,Render----[font=宋体,渲染主逻辑" u) A, ]: G) \3 K& E
[*,
: [% a0 {; p# O[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用! @0 M1 R( c& s' B/ @, @9 O7 B' Z$ j
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib# i" {; c# |; I+ @
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
' ?+ D7 c, b$ O. B& I P[*,' t4 @$ t' Q4 b/ |7 u
[*,然后使用:- ?0 g" \1 o9 V. {$ k- G% D. P# U
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic(). Y8 y5 Q+ e" o6 q: q4 x! t: k
[/list, [/td][/tr]
z) [" q! o* V3 `[/table]
, H: G9 V6 l: B* _9 z5 K
( T: }: r2 j& |; U3 K8 k2 @( d" M6 q) ]
|