[table=98%,
( M5 m( R6 |1 }3 {[tr][td]
. {+ W0 V( u- X; Q# D, R( T8 ]3 Q% u& \" L( [! {6 m
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
3 [1 a& F+ n; u[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
/ _% R1 U6 c6 O4 I, w% e7 {[*,
8 K* ` z0 t- L; F% M1 ][*,多点触控:
. a' [% G8 O) U+ U& A[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。5 X0 i) W' Q4 p2 g
[*,原理:
Z# x7 E/ ^/ }5 v; t; }[*,Int pointCount = event.getPointerCount();
# v( B2 C2 z4 H& m& e9 D' {% W[*,获取当前的点击个数。- h. f. o% U0 G6 [7 s. L
[*,ACTION_POINTER_1_DOWN( j( w* v& B. q! E# w% J6 K& R
[*,ACTION_POINTER_2_DOWN
( I3 v& `& S# I) \4 L[*,ACTION_POINTER_3_DOWN' s h. J9 r+ n0 N) g s$ Z
[*,ACTION_POINTER_1_UP
, x) J4 ^6 r& @[*,ACTION_POINTER_2_UP# N% H+ ]5 M* x4 p& q
[*,ACTION_POINTER_3_UP1 x$ D! c" p8 ]4 i, _
[*,ACTION_POINTER_1_MOVE
1 t0 d; j. Z. b[*,ACTION_POINTER_2_MOVE
7 n9 E$ Y! A5 ?6 Y( D' o! \[*,ACTION_POINTER_3_MOVE5 m1 ^$ ^' E) [6 i
[*,[font=宋体,获取各个点的事件响应
0 e2 g8 H0 A) }+ L" M* b2 y! b[*,/ f, }" H7 _* F/ J! Y5 s7 P
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
/ I5 F7 K7 F* R. n: x1 |[*,[font=宋体,同理第二点也一样。2 I" i# O L) \- ^8 a5 _6 c
[*,$ A6 Z" T6 {# S/ a; D9 z4 h
[*,2:[font=宋体,安卓生命周期
, U3 Q' C3 N# g[*,[font=宋体,默认的安卓生命周期为点击应用图标
6 d9 g7 u: i. V% P/ \5 D+ Q, Q[*,OnCreat OnStart OnResume
' ?; U0 j5 x8 k, N- }. G: D[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory7 K4 u; i ^! b, O, y1 Y! b
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.
0 i3 ~6 P, D. o% A2 b[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
+ I6 w Q' F+ g4 F5 T' Q[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;$ I; d, D9 | {3 ~$ @& A3 w! O
[*,[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,就可以了不要让他走周期流程1 F% p5 M, y* M9 r/ C4 Y
[*,
, D6 f8 v6 N7 Z. ]0 r) s, r[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏1 b5 M; K1 u* C. ]7 { F1 u
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.7 B' c7 E7 m/ b G1 |$ c
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
2 R3 j. x5 a5 O3 S[*,[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,.
7 a* Y4 k* G9 r3 {9 f# b P[*," y4 t }$ d$ q7 y; }- P
[*,[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 k& s! c$ P- m y+ k- h
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
, y3 T* b U2 v$ b[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,: p) I) _0 p8 Y9 Z6 b9 v
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,
5 i6 @& m( }; z* P% W[*,android:screenOrientation=[i,"landscape"[/i,>2 @$ K" s$ m X8 r* i- n* ~
[*,$ y& \ C& r+ \+ |+ U
[*,
8 {8 q0 @( A" o4 x[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
2 u3 c- s/ k5 D5 q) l[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类3 @& _8 c& s" S& U: c
[*,
, B7 Q$ R4 g" k5 c% |[*,读权限
* W: X6 u1 K, C8 X/ x# z: c[*,
1 b+ y9 d% M, i8 y8 q1 b) t[*,
) y8 C) I" s- d: Q' ?+ j[*,写权限
9 v; c+ N( N8 a/ u3 a1 i[*,
3 u4 Y. g) K+ N5 {# j2 M[*,
4 Q9 w% N- D s* w, Y- S[*,电话接收以及监听权限
$ p: K( ^7 w6 \8 n% G[*,
8 w) P2 I: E+ k3 W8 w0 v[*,' C$ E7 f; | _1 y4 @: |
[*,短信接收以及监听权限
1 k0 x1 |6 V' S[*,4 ~2 H$ v& }' I8 J/ M
[*,# f3 H( t& l# ^1 n# f
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页2 j E( R6 [, H" N
[*,# R$ o3 T3 D) f- ~- `5 g
[*,& g a0 z1 h: o5 ~( g
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
( o' i, k/ z- t( U9 W[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.( x0 M, ~9 g& j7 U1 }4 v0 C. Y2 }% s" \
[*,[font=宋体,所以需要这种方式.
/ } \2 u3 d$ G( A5 a$ T* n[*,[font=宋体,在JAVA[font=宋体,中自定一个类 W" X$ D! o* p' y5 k
[*,Class MyData1 N7 _) S% N6 x
[*,{
. k0 d; R7 s: ^) [! d9 K[*,Public: N6 z x3 |! F9 h
[*,Int a;
' E$ U8 T5 E* k6 C0 q[*,Int b;( H* w3 E& o; u
[*,Int c;6 H$ m0 U* K, V" v8 i
[*,……..};) S5 g" U( g% Q2 V% ]
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
1 w# c3 K4 c% _4 p[*,public static native void GetData (MyData data);
- S3 K" d9 ~6 o[*,JNI[font=宋体,层中声明0 d+ Q, g* L- \# W8 ^: K1 Q
[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)4 @3 x; u; v Y0 z9 R
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
) d& H* G F9 [. b( `& F7 l[*,jfieldID sound = env->GetFieldID(cls, "a", "I");3 @; ^0 R% e" i
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
+ c/ r9 u! a8 h4 j+ b& }[*,env->SetIntField(m_pdata, “a”, 5);
+ C4 f C; h+ Q& M[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
8 O' X- ?" y: C" |2 g R: w/ l[*,; M1 _+ r& T. w% J6 E+ k8 W& ^: D, E
[*,
4 k0 M7 }6 v8 Z- ]# z0 G[*,6:[font=宋体,工程搭建
6 g5 O. V2 o- q: y+ E[*,[font=宋体,首先编译引擎代码.6 F3 M5 p o1 \+ }
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
! D0 w; p' e& i+ j- k2 D[*,[font=宋体,需要重新 Cmake# G% X5 ]0 ~; q, C" Q$ A9 A
[*,[font=宋体,编译好代码后打开ZSDome
3 ^1 T1 x: u5 e) X5 Y; k# m[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
& Z8 c, Q2 A5 @( _; G" p! L[*,[font=宋体,然后直接直接运行即可." W& D4 s8 u. X3 T* w* G
[*,2 w5 s' r3 r$ k r
[*,对应接口
; k- u( P2 I2 l$ b/ \+ x; F5 Q; y[*,Android# K& Y1 ~! c7 h, n: Q
[*,DemoInit----[font=宋体,初始化引擎
' a/ J+ ~3 e8 \[*,Render----[font=宋体,渲染主逻辑1 R g9 `3 M% E( K
[*,
- m y+ F n3 f+ V[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用' j" v/ Z% ~- D
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
& X3 e: s3 @: U' r! T[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
# j$ C& X9 r8 ?; H4 e[*,
8 K+ I) c E8 A, z[*,然后使用:
: n& f: c+ ~3 K1 g[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()5 e$ b: @( {$ ^# C: M
[/list, [/td][/tr]7 j7 o& f' I4 O4 W1 z
[/table]
7 c1 z* H, g# E) U, u7 f7 z( J
, }" P: v a [6 \, Q( g
6 I! Z: o, r& Z% Y1 Y |