|
[table=98%,* W4 o1 A0 a7 w4 w
[tr][td]
9 B; {1 Q1 i6 p0 @5 r3 _+ |6 U( }* X9 L
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
! _5 ~3 f5 ? T; D( P; q[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
# ^7 n. V) ?& q1 z[*,
@( B! \; p3 m8 T, C[*,多点触控:
; h1 ?0 V, V! t1 I. N, p# X[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。, ^* b9 N6 q3 B8 y+ c) j
[*,原理:3 \1 `5 @- a% t! ~* r& N8 H I
[*,Int pointCount = event.getPointerCount();9 B$ ~6 w3 u6 b ^& c
[*,获取当前的点击个数。: [* k+ O7 Z) o/ v
[*,ACTION_POINTER_1_DOWN) n" n& f* ?5 i8 F6 I5 b
[*,ACTION_POINTER_2_DOWN
+ M3 Z# }8 x7 R0 V, X( d+ q# @[*,ACTION_POINTER_3_DOWN
$ s1 ]( y3 }8 ?) Y+ g' g* b[*,ACTION_POINTER_1_UP2 b, y% { f8 S+ e9 ~8 X5 G
[*,ACTION_POINTER_2_UP
* v% u# X& g6 q& I1 r* k[*,ACTION_POINTER_3_UP& [- c! w8 R& G9 l0 v+ T" M* {
[*,ACTION_POINTER_1_MOVE
5 \) C# B) S, V) m[*,ACTION_POINTER_2_MOVE
& G: @% t; l5 U7 ?[*,ACTION_POINTER_3_MOVE
( F. [$ O2 Y( Q+ A[*,[font=宋体,获取各个点的事件响应$ P' w1 T+ e. e6 R; b
[*,
7 r b, x4 ?/ b4 {3 ]' t: p[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。0 [: K. z" }$ Z
[*,[font=宋体,同理第二点也一样。. {) ~) W o* V. l
[*,' u5 c5 G. f0 U+ K: N5 y& i; {
[*,2:[font=宋体,安卓生命周期
! g4 r, A$ G3 H5 u+ o c3 ~[*,[font=宋体,默认的安卓生命周期为点击应用图标6 L5 r: P1 U. }! P
[*,OnCreat OnStart OnResume) B$ A" ]: ]" x" l
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
% E! R5 {# R& u( @/ f: ^. O) J[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.8 Z$ Y l0 t9 V0 n, D. f2 g
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到$ \' ^# k, h4 Q; D+ D7 s. h6 ^+ M3 g
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;+ O" P# X; q: Y7 U8 d# t8 T
[*,[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,就可以了不要让他走周期流程
& o/ x; s4 X W8 l6 N3 ]3 k[*,8 A% Q9 \* h& {
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏# W8 W! c% E1 K
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.6 N1 Y! ^, _5 L$ u' {5 C
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
5 ^6 ?7 a1 e7 p[*,[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,.
6 r2 @* D; o8 y- l[*,6 v! [$ c2 a+ b4 v+ h+ f2 W
[*,[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,具体写法2 U* [5 V, l, W/ ?
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加% B; s2 w4 V6 Q8 C8 n' O
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,7 Z# _; _( z9 Z
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,6 a( t/ N A; \
[*,android:screenOrientation=[i,"landscape"[/i,>* G9 W/ u( G# y: }8 F
[*,
6 y# E. O0 j5 X+ r; }[*,
+ A, ~9 p W# C8 K8 D! f0 ~1 A[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限" r9 O; W7 [8 t3 G, {5 L
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
5 h( \# Z/ d+ _7 `6 M. h" g[*,2 X! r, m5 q2 c, Y
[*,读权限$ u3 i& b5 p6 w$ y; W; Z
[*,
) I" g. V3 N% G; O+ e[*,5 t2 Q1 |6 P' [; h5 E e$ h
[*,写权限
' ?, `* R" O: h' p# j[*,3 f' l$ w n, g
[*,
2 ?: R/ i$ d- |, ~; }4 ^. ~[*,电话接收以及监听权限
$ f( ?5 ]+ r7 h7 }4 W9 V- `[*,* S# Z7 \, m8 k7 K
[*,0 a N1 {* Y/ h6 h% y- j! g+ ?! O6 v
[*,短信接收以及监听权限
! Y7 |! Z8 z/ n[*,. t& L& @% F( l: C. `5 O
[*,% }- F& w, u# M" b
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
# S/ F! M8 n* U' W% e, c. k[*,: A) O' w( f! X; W1 M
[*,
: e& t* u/ z+ V[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
! ^8 A) W9 j( o! |[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.8 ]" t7 @- A$ n9 v2 r1 f& J
[*,[font=宋体,所以需要这种方式.1 ^1 f6 d, M/ z2 H% ?6 B
[*,[font=宋体,在JAVA[font=宋体,中自定一个类$ \" ]& g0 P# T( F& D
[*,Class MyData5 f: Q" M' W$ L4 [
[*,{# Q l$ o$ n" Z1 M
[*,Public: x/ |% ]8 \) X3 N
[*,Int a;1 j. C6 p! W$ D0 P5 j2 ]
[*,Int b;
; q F, ]! i- Z3 C s; Y( g[*,Int c;3 B8 \0 s, L5 v K
[*,……..};
! x+ x+ {9 P3 Q9 n[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明$ d4 r5 E8 V4 |7 i0 c
[*,public static native void GetData (MyData data);
, G" ~+ F# f/ k7 I3 W[*,JNI[font=宋体,层中声明" K- I; }( B8 t9 w, u) l
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)/ p9 A, @: L+ u2 [* @% ^7 L' {! r9 Y
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
" Z; A% ?- h& L[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
. x) v) N' @# N$ @9 q[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
4 Q1 o6 K6 e8 M[*,env->SetIntField(m_pdata, “a”, 5);; [; A# {( T$ u2 s
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
2 a8 F# v! d5 M% l# H7 d[*,
w* _" T+ o8 w' C* G4 Q[*,
`6 R/ z5 y7 z[*,6:[font=宋体,工程搭建
* y+ B `( R5 h4 R- k[*,[font=宋体,首先编译引擎代码.3 n( P- R) \% P u, x) S' t" N
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,., `- V% j3 f$ \ r
[*,[font=宋体,需要重新 Cmake
1 x# S. a6 b3 k. s[*,[font=宋体,编译好代码后打开ZSDome* \( T# M* _+ a% A- J
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
5 D* }6 ~& ?3 |$ @' U, c1 @- x6 [% J) D[*,[font=宋体,然后直接直接运行即可.
1 O5 }: p8 i* w, N4 M[*,, d8 K8 v. g, I/ n0 W! a
[*,对应接口
& z! [% i# O5 C* D3 i/ o[*,Android% y+ w# L8 {& ?6 ~/ L* H
[*,DemoInit----[font=宋体,初始化引擎
7 B/ o3 f8 E9 z( u5 ][*,Render----[font=宋体,渲染主逻辑
3 S; ?0 I$ Q8 h$ z+ w _% h6 r[*, D* N9 M7 b0 A' s) _
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
. G- C4 J6 \0 u+ I+ x/ o[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
+ G6 n1 w6 g7 T' ~: K; A[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
9 u- c1 k' ^+ G) l3 D5 Z3 {$ s[*,& y+ {$ `- w7 `0 A5 A4 x q
[*,然后使用:
$ a- D2 R% L f[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
; x: @- `( x( ^ j& K; f) d[/list, [/td][/tr]" {/ A- S& h. t* V) e8 v+ }
[/table]
* l1 P) b# U% `; U, R0 E" P
0 V9 e) |1 l5 l9 p: S! w$ n% u3 `: R- }" v8 p; }$ i3 Q
|