|
[table=98%,
0 g' \+ L0 D( W. e[tr][td]
3 e& J: L2 T: f( B5 X! S6 \/ L: Y. g8 S. O- b1 v
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,8 h- y0 J& d! }. q
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案! A' O9 T+ m4 Q$ H- q; X* T! X
[*,+ ~- W. n2 ]8 L6 _# v
[*,多点触控:
3 @" J9 @$ r o6 s2 m7 `4 a[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。; f# o$ v5 l% W- A2 t& Y
[*,原理:
* x% d3 y& m% L5 q+ T9 T& S5 d[*,Int pointCount = event.getPointerCount(); ~+ ^ l S! L% x! R- J$ O
[*,获取当前的点击个数。8 ~% e2 W% V/ _8 [
[*,ACTION_POINTER_1_DOWN. \& P! F. z9 I2 F: J. e
[*,ACTION_POINTER_2_DOWN
' e5 L8 e1 b) f7 [5 u, J9 F* ^ d[*,ACTION_POINTER_3_DOWN
. y3 V( i* W; m! C[*,ACTION_POINTER_1_UP
; ?5 g/ ~$ a6 g: Q, c& S, m[*,ACTION_POINTER_2_UP
3 A _, G. @( W[*,ACTION_POINTER_3_UP
: m8 B0 w1 g% q" S% }3 \* U8 I M[*,ACTION_POINTER_1_MOVE
0 j/ ]2 _+ J. S# \! l& N- O6 D h( q[*,ACTION_POINTER_2_MOVE: q9 u5 m, b4 h% z: c
[*,ACTION_POINTER_3_MOVE
+ s) s; @5 R/ B! ~( X1 N[*,[font=宋体,获取各个点的事件响应6 A7 u- m7 ]7 }3 \6 G" ^
[*,- [ a% f7 u$ I! Z; Z& i
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。3 h4 w" C1 f5 N* U: k
[*,[font=宋体,同理第二点也一样。
5 a6 N2 O, A! o( c- j& f7 ~[*,
& I; C7 j& d& b* c) @, H) U[*,2:[font=宋体,安卓生命周期
% A3 }; M# j+ G. ~8 d[*,[font=宋体,默认的安卓生命周期为点击应用图标6 Y% n- k0 N9 e( V4 `# I
[*,OnCreat OnStart OnResume
n! E& \4 ?: R$ [[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
2 ]% R7 p$ ?3 ^7 ~8 v0 Y% W[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
! @3 y; A! J5 A9 c5 V0 k. ^5 B* ^3 |[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
1 [3 ^7 W; @ x- Y, w( Z' ?/ s$ w: E[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
5 q3 j4 r" I( Q! b3 t! @9 ~0 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,就可以了不要让他走周期流程9 u" {5 n6 \; J
[*,: ^; }. V) b/ x
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏- s& ^! ?/ E v0 J# Q! v
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.5 L* r( I& X4 a4 @
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的. K+ Y: R& }6 B6 K
[*,[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,.2 l. M* h' y+ g* P1 u) e
[*,
4 n( v8 N! O# w: O+ d- Y" Z2 I1 R[*,[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,具体写法5 l1 S/ l6 R, S! ?
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加1 I+ G5 s! V h c
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
6 Y' ^9 d% |; o @8 o* f' A[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,$ z" A0 H3 p; W+ [2 D
[*,android:screenOrientation=[i,"landscape"[/i,>
( ^) O( f2 Y. p6 p9 O& e[*,
# g+ E6 |: [5 W$ s# Q) n[*,
; E) m5 r: R+ |9 f" p& n[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限9 P" \" M a, P
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
, e ~3 I9 Q3 @4 ^( F[*," G1 y/ g1 N4 U6 H* x; h
[*,读权限! T, ?, f# Z0 Y+ H
[*,
9 m ~# m- l) m" J# k! e[*,
$ x) M" J+ J1 T6 Q[*,写权限
3 h2 K9 K* ^! b3 t6 O( R[*,2 Z, l0 p) H& V* L j2 y
[*,4 M0 {6 D( u1 A; n, ~
[*,电话接收以及监听权限
' K9 Z* k, p8 E) h[*,
& V! K2 n7 ]: }! P& r$ E3 A[*,
! ?: S! g/ F% z" [8 Y[*,短信接收以及监听权限
5 F) y6 n, N# E- I3 ^+ D[*,
0 M' Y. O+ g1 P' ~* b2 C[*,0 x0 ^& Y- c$ x. f
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
' ]" H+ x1 F! B& |% |[*,
. i# e2 f% `/ s+ R- T8 Q+ u[*,6 o5 f' a ^' \$ N$ ^- G$ ]6 I( P6 U
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互' y7 ]' ?. A, m# E4 ~- S
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.3 m" b7 G5 P/ P$ i
[*,[font=宋体,所以需要这种方式.
@- T2 A# L) y7 N# r6 z8 l[*,[font=宋体,在JAVA[font=宋体,中自定一个类" T9 h8 c8 Z& R, E, |$ g
[*,Class MyData4 S4 S' U# {5 z# z" o8 p" I5 J( d
[*,{1 B* ^6 }; n9 {" m6 Z" b9 q
[*,Public:! e8 ]1 P- H/ [+ k5 C
[*,Int a;2 V X% j. M7 e9 @) |
[*,Int b;1 j- Q' Y! r' l- {& g/ q; ^
[*,Int c;2 ^ c! ~( L7 @1 Q
[*,……..};
4 e# i+ a6 h" v) s! s g[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明8 J( Q( S! D( d# E0 f1 b6 e
[*,public static native void GetData (MyData data);, h" s2 T% t0 I1 P3 A, F5 G
[*,JNI[font=宋体,层中声明
$ `( F8 j/ S; V( T1 [; O[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
! |9 S ~8 b( k2 B5 r6 V[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值* ], m' K$ x+ c( t( M Z
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");/ d/ X2 t+ {* m4 o% C7 x/ t
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值4 l& r0 g, ? I# U, N9 |! Z
[*,env->SetIntField(m_pdata, “a”, 5);8 |* X% e. }. g" B. G7 z7 |
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
, e$ c! I- q% e5 q& C# A+ w[*,
" o: I9 L" [# v: ^) r[*,
9 b$ h, p. [" ]+ Q; S$ _ I[*,6:[font=宋体,工程搭建
( o: v+ w- h4 R: p[*,[font=宋体,首先编译引擎代码.6 @/ ]' W! ?) M& L) `7 W; j
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
' |* G- g7 m6 Z! r0 I& O5 e[*,[font=宋体,需要重新 Cmake' A1 q a+ \4 G( Q0 A' n+ y
[*,[font=宋体,编译好代码后打开ZSDome
6 ?3 d5 o' |, h1 \4 W) y h5 l2 B[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
! T- c o# O& F! ^8 q[*,[font=宋体,然后直接直接运行即可.7 i$ f1 h' s! c
[*,
; W1 [' z- o6 w/ x2 k. v( g' j# U( j[*,对应接口
/ T9 o0 l5 z5 M+ {! e- ^7 @[*,Android
5 _# G7 L* A8 L[*,DemoInit----[font=宋体,初始化引擎6 C+ ^2 C6 A3 g
[*,Render----[font=宋体,渲染主逻辑
8 V% S* h' J( K1 X; i( n[*,
% B' h; {$ J+ T2 v; y- L' n[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
6 w. k& j4 k! L! k" Q+ A) p[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
; ~3 z4 B1 L! ` ~6 i% v[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
6 i; f/ y: c% C5 {& Q+ `[*,- p, [* z- w7 | Q1 M0 |
[*,然后使用:2 H j. ^0 Z. L6 a7 n
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic() u, M9 \3 O. D$ d& F7 A, Z9 [
[/list, [/td][/tr]4 A0 n- H# Z: H8 `% V @
[/table]. s2 R# |: E8 `- A0 C
6 F8 _) I, ?9 ], Q
( H+ O# f# B" V. j' t' N) e0 P* K/ j/ j4 Y
|