|
[table=98%,
4 n {. d$ j5 \ s, [$ ~[tr][td]
0 V$ y! A% @! \) t& k4 Y& x& A( F! x. m0 F1 P ^3 }% d
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,6 \1 p2 L* a# r# N
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案# v& C* Y4 P1 o& ]# G7 Z
[*,: ]% u$ c* t& i: O# E8 a% @
[*,多点触控:
+ r( P5 F& O D[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。0 R% ~1 V# f, V* E9 T' h
[*,原理:
6 l# V+ Q* x1 V* i0 B[*,Int pointCount = event.getPointerCount();' u2 u' i0 Z/ f: R. @! f
[*,获取当前的点击个数。
2 x4 f. m6 z" S! E[*,ACTION_POINTER_1_DOWN
1 M4 h/ Y7 _. t[*,ACTION_POINTER_2_DOWN. r' z H6 S' T( o9 z
[*,ACTION_POINTER_3_DOWN
2 k3 w, s9 N, e; ?[*,ACTION_POINTER_1_UP
6 j, \; E: O+ R8 V( ]( f9 w$ g" J( }[*,ACTION_POINTER_2_UP
& o4 k# y: P) D0 K! Q7 R[*,ACTION_POINTER_3_UP
7 [# B9 j/ C) j% W* r/ V# w% A& t( n: b[*,ACTION_POINTER_1_MOVE
+ ?! }; \" }% {* K, U[*,ACTION_POINTER_2_MOVE
/ C$ c, T; w* l6 e4 n9 }0 C[*,ACTION_POINTER_3_MOVE$ p7 T6 W% M0 U0 `7 E
[*,[font=宋体,获取各个点的事件响应
7 i/ b, k% s. o7 f+ [[*,& f% G2 G/ u, s: o$ m/ z) I
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
/ j; J' g# h$ J7 Z& q1 {; i% s[*,[font=宋体,同理第二点也一样。) H& i& g4 A! [7 V& d
[*,, Z% @2 X( z4 e% f3 g
[*,2:[font=宋体,安卓生命周期
% q9 b e9 D8 L* f7 p[*,[font=宋体,默认的安卓生命周期为点击应用图标
- z B/ {9 I; {[*,OnCreat OnStart OnResume
: |6 X; H( K1 e[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory8 ^8 b2 `% J; U6 f3 [' H
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
( n9 E, K4 r4 W: j A3 b7 y[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到8 R8 N" y2 I% w; k5 Y
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
+ V: w# D0 z) }0 W[*,[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,就可以了不要让他走周期流程3 @: a# V# N7 H( W7 U3 i. C
[*," E/ |3 a! T9 j
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
! A2 h! _; o8 k% n) R2 u6 v$ d[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.0 e# m0 w- a4 t/ `6 u+ U9 z9 c& R
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
* S; w! V6 [% D' X1 \8 ?( 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,.$ z$ n& ^" e$ t- s- l$ o
[*,* b! Y0 d5 S8 X S* P/ c9 O' ]
[*,[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,具体写法( b: n/ a$ a; G: X; E, t3 P
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
8 ^9 y$ T# j$ ]: m' Y3 d3 k# Y M p8 D( h[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
& a4 b5 d* h4 D0 e) s[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,2 L: l7 s, g0 r9 o0 L1 }' L" o
[*,android:screenOrientation=[i,"landscape"[/i,>5 u+ \- E5 ~2 A! `" l, c
[*,4 z& v# c2 z. z5 g' S+ q; i! P
[*,* y7 J9 \% F7 K
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限1 N6 j* {; w: ^/ J" d: S* Q
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
2 P l% q& {9 G ~9 w6 `8 J[*,
2 m# P( m7 w% c8 [4 r2 ][*,读权限
- [& z9 S+ x- O9 |[*,
+ G! X/ I6 U1 W* z% i[*,
# w" U; R2 }* m# l( e4 _[*,写权限2 @; _" e9 o% r+ D
[*,5 x4 Q c: q4 g
[*,
: F* c2 Q# _0 R3 |[*,电话接收以及监听权限5 ]* v1 V$ n) @$ c2 D
[*,! e& O) g% C) j
[*,
+ a4 c2 o; s4 P) s[*,短信接收以及监听权限, z, I m2 E/ m- h( m& ?! m
[*,
, e5 P" q6 O1 n& M1 b[*,6 Y3 q5 t" p( L( ~3 G
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页- ^5 i# q. I, r% r8 z
[*,, ^, y9 U. v$ X: N& H0 f; D
[*,0 a7 ?: W' `! Q3 ^" _. s4 R4 Y% G
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互7 a" t5 @0 l% S
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
6 ~9 A: a! W/ `1 o+ u) i7 U[*,[font=宋体,所以需要这种方式.3 ~+ c( Q W ?; o2 P
[*,[font=宋体,在JAVA[font=宋体,中自定一个类- @) p- g+ M2 g/ k. g
[*,Class MyData
3 p! H& b) h- X' M6 i* {[*,{& ^; O P, [, k1 J
[*,Public:
6 [6 k; h! ]5 r9 X) T[*,Int a;* g7 l4 E5 E# y$ x1 |9 _5 x
[*,Int b;$ P+ P, w4 a+ g' [8 s8 j5 H
[*,Int c;# o _. ~; I3 |+ ~& W
[*,……..};
, g9 W& l: Z8 T0 t l7 `/ C[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
5 V% [9 {2 G6 h1 T/ H) z# x7 d[*,public static native void GetData (MyData data);$ T1 w, j( K8 R! }
[*,JNI[font=宋体,层中声明9 o' C5 g( u$ {! j& f+ m
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata); `0 G% ]* T$ l: o: [0 q) e; v
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
2 Y8 q# h9 ^& V. R/ d[*,jfieldID sound = env->GetFieldID(cls, "a", "I");# m( N4 {$ H& O7 [' z( Q8 m! M* z
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值$ b8 o/ F$ s4 g, T
[*,env->SetIntField(m_pdata, “a”, 5);7 T( y6 z7 H+ a1 J
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
, i7 Q! X- q( o[*,
) I/ Y# G( M' z& ^6 O[*,
! W1 U4 w5 e, a8 K8 D: Z) a' G[*,6:[font=宋体,工程搭建
4 t# e! h* M) v3 t4 Z1 C6 I[*,[font=宋体,首先编译引擎代码.
% r( o* m8 w0 @' a# p& q[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
. H( ]" F6 r( v4 ?( H) j" y z# m7 m[*,[font=宋体,需要重新 Cmake4 G; s* e* [6 Z1 v9 D
[*,[font=宋体,编译好代码后打开ZSDome4 ~9 ]; e# @' ^( U1 A( h
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
5 R8 s V- [: I, O: S7 A N[*,[font=宋体,然后直接直接运行即可.1 U1 L1 V/ O' ~6 l% ^
[*,
& X |- f% h j$ A1 x[*,对应接口4 t( P0 i! F: u$ n8 g! W; u
[*,Android! I$ [, }/ f( J& L w4 |1 i" [* a2 ?4 }
[*,DemoInit----[font=宋体,初始化引擎: J! J0 o2 o! n- z
[*,Render----[font=宋体,渲染主逻辑
7 v& I V. d4 Z# F; i8 a[*,
( B9 V- ]8 k, f# _9 h$ |: r[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用# n p" l7 `2 u2 s/ E% ^
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
' } `0 w: P. O. G8 h[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a3 F% {+ }8 o5 G$ `3 W8 I0 G7 |
[*,: z5 ~' m# w0 b2 g
[*,然后使用:% _; }$ h+ @7 h$ ~% l
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()# o! }$ Y* c5 h, M% M
[/list, [/td][/tr]5 O& S& h [+ B% v9 I M
[/table]
3 W$ T3 `& P9 c3 f) k" h: ^9 G& z% U: z# ^6 T A% X* V
# i' V2 _4 Z# g! j1 V. B5 a8 ? |