|
[table=98%,( F3 J+ w- R T& \* }$ _
[tr][td]
3 {$ M. `& R% a `- d+ j9 n; H* ]' f% m, G% v+ W" j) R2 y! s
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
5 d8 {' o# H& o1 _% w' A( M[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
/ y# x y& l$ R. J% [# q[*,6 u M3 ?; M: K7 F4 @
[*,多点触控:
8 M, _! t7 i; }1 m* v: B" a9 H[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
* m# m) [9 ? U/ m[*,原理:
0 e9 _$ U) ]& s9 X# W d[*,Int pointCount = event.getPointerCount();" {& m. C' _& s- t, c2 q4 S; I
[*,获取当前的点击个数。
) K3 t$ j5 |" r- m4 P. ` E$ a[*,ACTION_POINTER_1_DOWN
$ R% W1 m# L9 x- |6 p3 [4 c9 i[*,ACTION_POINTER_2_DOWN
7 R1 E4 {% C" l* \1 p5 T- P# z( C3 E[*,ACTION_POINTER_3_DOWN' V5 x1 v% @$ T
[*,ACTION_POINTER_1_UP# g% V* s+ X# E& e+ u
[*,ACTION_POINTER_2_UP
- M6 R N. G7 ^% Y[*,ACTION_POINTER_3_UP
6 Y0 L8 b' _& M( K[*,ACTION_POINTER_1_MOVE4 `6 e8 c% w( x
[*,ACTION_POINTER_2_MOVE0 i/ k. a) M$ D. I% G$ J. N
[*,ACTION_POINTER_3_MOVE3 I0 q" @( [" X, b5 o! @( K
[*,[font=宋体,获取各个点的事件响应. [2 c6 m3 `* Y& A- V# _# s
[*,9 i. I" A: P6 b$ `
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
; ~9 ]# q7 p2 x/ V6 r0 K# p- t& x[*,[font=宋体,同理第二点也一样。
! i3 Z6 f: o7 y/ |9 M+ F[*,
8 m3 X$ h% k1 e[*,2:[font=宋体,安卓生命周期
# W5 C1 k3 z* O! S1 `[*,[font=宋体,默认的安卓生命周期为点击应用图标
- y0 ?1 m# A$ V4 {/ @ L5 N[*,OnCreat OnStart OnResume% e3 W9 v* Y$ @: L' J$ B, L
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory. }+ i6 |7 ]6 ^ I& B# V* d
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
, I* n0 E# w" s4 X7 J- b. a( o[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到5 J4 }3 J: V8 \- g7 G
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
& Y) i+ W' C$ G[*,[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,就可以了不要让他走周期流程
6 r j8 z' K( f7 @5 ]" u[*,' a3 K( C. X& f8 u
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏3 R& i$ `" P8 X2 e: X
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
/ v+ J- X2 ?; G( g5 H[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
& o% p4 a7 r: m; M5 U[*,[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,.. I3 r+ S% R' b, D4 j. b+ c! T
[*,# U& K' H& G9 t- p$ ]' p/ h
[*,[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,具体写法
1 b& E9 k) |4 o( p3 T% B1 _+ E[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加; a- Z. _5 Z6 |5 ]' {7 Q) u) s
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
0 M R) O/ Q$ I: L8 l! A2 `" L+ n# r# X( @[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,# Q8 \/ d, J! g# K3 @
[*,android:screenOrientation=[i,"landscape"[/i,>( `, w! g1 c. m7 K6 d4 y, \0 f$ Q
[*,6 }$ ]- S, p- o7 _8 F5 J5 X
[*,9 L4 R! N; r' O1 m6 z0 }: r: }" S
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限5 e: {: m$ U9 u* m; Q2 W" j) C8 h% C
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
/ m2 Y Q2 p! E7 f' ~) E1 N9 D* ~1 C[*,: v' o8 v( N6 U* K! X) K. G
[*,读权限2 B; u- ~6 L& J4 [1 ~, D
[*,- X; N: B. z0 k
[*,+ _! J) F3 t" l- i' b' y
[*,写权限
$ T1 i& e1 m8 e- T3 I- q y7 f[*,* N( Y7 K8 ]. {& Q. V+ D6 n3 Q+ Y
[*,8 G0 {& W2 R6 O' _0 N1 Q1 P6 H
[*,电话接收以及监听权限: _ U8 |- u% j5 h0 P) I+ s- K+ H n
[*,
: g6 p5 k0 S; ?# D[*,
2 J( S$ ^- F7 x+ R4 |. X0 }[*,短信接收以及监听权限
9 \/ I& \7 w! k6 N9 N+ ?[*,
$ {0 @9 k' h0 N/ [4 H3 [$ }[*,
7 q3 W2 r7 M; s[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页( [ x& K' ^* [2 e; b% [) m
[*,' W8 F3 H/ g( _# s: q( e
[*,' ]* h! W" G c/ Y
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互- o8 L7 ~. B+ ]% \' Q0 b2 e/ Y
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.$ ~* S: P6 e" k$ O+ U0 B5 f& p
[*,[font=宋体,所以需要这种方式.4 _& h) o. {# I' s8 S
[*,[font=宋体,在JAVA[font=宋体,中自定一个类) g" c& k# K7 W' {+ {3 {4 n5 L
[*,Class MyData: f- U. W8 ]% u
[*,{
3 h% ^* E3 m$ |' i5 f[*,Public:
1 D# W" {: p( ^& p[*,Int a;
f( X9 [, F, K; F7 X4 |' c[*,Int b;
/ m( R, T8 S+ c. d2 M5 w[*,Int c;( S% J9 t$ p0 F3 I
[*,……..};
5 e. _5 i+ T1 O0 y; r[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明$ g8 [1 b: S; S" E4 ^
[*,public static native void GetData (MyData data);& b. |, ]7 w& V2 m3 ]; R& ~
[*,JNI[font=宋体,层中声明1 k5 D) u8 r& Y' n
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata), L% `+ f( s0 j7 y
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值5 ~3 u8 m% G6 T( c) T# j4 L- X1 P
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");, v% ?7 m6 z9 C& C4 `8 G
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值8 N; c9 r/ [) x# H- d( D; J- U& z" A
[*,env->SetIntField(m_pdata, “a”, 5);
. x3 [- |5 x- T) Q7 B; Z! }[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.: U" K3 s2 ~% l8 T) H+ N
[*,
: ~& j9 j5 x# m2 i# v+ ~* X- N' {[*,& i" c- h5 u+ f; P% i
[*,6:[font=宋体,工程搭建
1 I7 g1 |3 @& S* X[*,[font=宋体,首先编译引擎代码.
" \0 u# ~1 P5 K* k* p4 E5 e/ H[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
6 g! E& c, m" Z( n' z1 U[*,[font=宋体,需要重新 Cmake
* }6 ?7 V2 _& @* I" \[*,[font=宋体,编译好代码后打开ZSDome
2 U+ y3 U) F+ u: o[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下; f7 J0 v% f& z
[*,[font=宋体,然后直接直接运行即可.
/ z b$ Y' p; @: A3 k[*,
% D" O. Z" Z# S, V9 `[*,对应接口
3 V7 H5 M. G+ p" Q' t* ][*,Android
* A, W6 H- s0 s! c* \: z x4 L, g[*,DemoInit----[font=宋体,初始化引擎! Q) J9 O/ J5 H+ t3 \/ @
[*,Render----[font=宋体,渲染主逻辑9 y% z8 F Q+ M8 B2 H
[*, m2 j) m& D0 {$ g
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
) J0 u+ M. H, g( d[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib- C& T( c) r( x2 |8 }
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a/ O3 }2 Z* b, V% X& y/ M
[*,8 B& Y2 G" M1 E9 p, [, I: B, V
[*,然后使用:
% |' f- U" [2 h[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()3 I5 J; r& H5 E4 j) S8 l
[/list, [/td][/tr]7 {+ ~" n# m6 u
[/table]
: r% r! ]3 o7 F% H+ t
5 Z; `+ @; B$ C3 Q8 H9 y) [4 C9 }, B- N* ^5 \6 }: s8 P
|