|
[table=98%,
3 }6 e. m- Q0 Y0 y# z- v9 h[tr][td]. w, F% m# Z6 a. H/ \
* f4 Z& _8 @& H[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
( O( f: L- A% }3 _[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
- W$ |7 X9 F" q% V6 W4 I0 I[*,' C: W0 w$ s3 N+ m5 h Y6 k. K
[*,多点触控:3 k2 N! T. A6 q
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
% E& \9 f. v) ^% i) C- z p[*,原理:' ~* |9 M# o0 V4 X4 j
[*,Int pointCount = event.getPointerCount();5 g. q! @: H9 u( D: S, ?( J ^
[*,获取当前的点击个数。: G, u; ^" ?0 `" L5 g ?# |, m( W
[*,ACTION_POINTER_1_DOWN. ^/ b E( \1 u# Q, h# `
[*,ACTION_POINTER_2_DOWN
& ?, _8 I6 W' Q0 P. A[*,ACTION_POINTER_3_DOWN) o' D' A' K: }& U
[*,ACTION_POINTER_1_UP, `5 d: V& g0 R
[*,ACTION_POINTER_2_UP% J7 ?" R) w) t7 w& l C1 y' h7 ~: i
[*,ACTION_POINTER_3_UP- S: t0 n; z1 S8 S) I# O
[*,ACTION_POINTER_1_MOVE% g; C3 T2 q! y
[*,ACTION_POINTER_2_MOVE
% _& p9 ]* V! R& S& W[*,ACTION_POINTER_3_MOVE# b/ F9 p9 y. ]# w* E# y) z
[*,[font=宋体,获取各个点的事件响应% t( E, e% h$ w1 U, q# G
[*,
$ i+ h2 j8 s2 t$ n, j3 C[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。8 U" w. O: o/ t; U, N4 t
[*,[font=宋体,同理第二点也一样。, p, m @2 ]/ ~& T
[*,
$ X, p/ i/ W3 Y. y) O$ Q; e n" W[*,2:[font=宋体,安卓生命周期
4 n% m2 _% l9 o" t9 t0 d$ a[*,[font=宋体,默认的安卓生命周期为点击应用图标8 m8 T, `% ^# V- T! C/ s# K. Z" c
[*,OnCreat OnStart OnResume: V# B0 J0 ?0 q, {' _1 w
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
7 W& n/ T2 I' T[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.2 t" D0 X5 o6 [4 M9 J
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
" W( D* c/ Q7 g[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
! V% X' P8 \ o" E[*,[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,就可以了不要让他走周期流程
( V6 n7 B, A/ K1 r' {, R+ d" P[*,( |! T5 }4 g. L- o4 R
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏& U$ i+ @& V. b2 I
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.$ {( e5 g7 ]% R: x: {( E2 t$ Q% Y
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
" g! Z2 `# X2 Z5 d[*,[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 N5 g! {8 T' q4 j[*," C' `: R& g' }3 Z) D- ^
[*,[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,具体写法) k9 G1 S# X, B7 [# q0 o6 @
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
8 z3 I% X' u: N/ c) `( {3 m[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,) g3 N/ _: i8 `8 v6 ~" K
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,7 u5 @0 n! V$ {
[*,android:screenOrientation=[i,"landscape"[/i,>
0 j) E4 y. D B5 t5 G[*,! d& `- g+ ~& @- Y4 x
[*,
, B( z6 \' M8 h# c[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
' k4 N k8 B1 h[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
; W* E* Y) h: k% }[*,
/ _. Q1 Z' s! n* B( @* w7 q6 p[*,读权限
, t) g8 h R( y3 m9 d4 T; j[*,- r+ J7 R! [/ V$ E5 g" h* l
[*,
* Y) i+ \7 A3 i& F4 ~[*,写权限
- I; x. z2 H# L, i6 m' f3 ~[*,
7 P( v, p% @1 y) E n# \, t[*,( }9 V# [7 J! D# S( g
[*,电话接收以及监听权限
: G2 a+ D+ L- c( b& c S% ~[*,) z/ ^8 c& A2 M/ y8 E5 k; _
[*,
7 ~9 m1 X- G( z* M. q7 f. j {+ |[*,短信接收以及监听权限# o$ R. K& p9 b' W: u
[*,( J! W {! @: G+ q
[*,6 W* P" a. n! L" F( x' _* t2 a |
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
* y9 W! o: X, \4 p[*,
) p- Y" V; M# k5 W[*,
2 n3 M8 J5 L7 v0 N M; ?* y& l& }[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
+ I5 w6 s% s( y6 B# W2 a, G' O- a[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
* Q% j3 z2 m7 n- d# I[*,[font=宋体,所以需要这种方式.
3 e, e$ `4 w" k$ O( @4 w9 a' u t[*,[font=宋体,在JAVA[font=宋体,中自定一个类+ i( x: X1 h0 A8 y L; H& D
[*,Class MyData: Z0 w4 C- w$ A; |; z4 ^5 S
[*,{4 `! h- F4 w" I+ _0 Z! {, x5 w
[*,Public:
0 M; Q- m( z4 o9 D- }* @/ ?. j7 U[*,Int a;3 Z' d& Z( f% l+ L4 I; _0 S j
[*,Int b;
Y- X, K8 ?" u6 M- v[*,Int c;$ M# c5 a# ?! Y: \ k
[*,……..};; G4 [* p+ E0 |* [
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
7 J, G0 x! V B& _4 m[*,public static native void GetData (MyData data);
) i& {, Q- X: C' {[*,JNI[font=宋体,层中声明
+ @& c1 K$ d2 b) U+ a3 _; C[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata); x' B! X3 ?; D8 K. i
[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
9 e& q0 ^' C0 s% q( P[*,jfieldID sound = env->GetFieldID(cls, "a", "I");
5 v; w9 f+ N r* i3 E[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值6 M. l2 ] R0 a1 C* t
[*,env->SetIntField(m_pdata, “a”, 5);
* \( i: `5 G% s. U4 W8 }( k4 Z2 i[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.# @ P% Z% S, `$ ] E
[*,! Z4 C) d+ Q# g. v
[*,
7 `% M7 l/ V: a9 s# V4 T2 a[*,6:[font=宋体,工程搭建
& @; |8 |2 |5 V! B. k[*,[font=宋体,首先编译引擎代码.8 @; S7 ^5 L/ R0 L! W9 z1 ]$ D
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
. _2 p3 J$ T/ Y! J5 G2 M[*,[font=宋体,需要重新 Cmake* s, ^5 l6 L6 s3 R! X) h
[*,[font=宋体,编译好代码后打开ZSDome' b- E! r1 G3 b9 [
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
* s. n3 M% `0 T0 b& J[*,[font=宋体,然后直接直接运行即可.4 M) ~) q, g' W- U* Q: ^! M$ E
[*,4 Q# z! [* Y. J! N+ j
[*,对应接口
' p. V, D2 s# H3 I[*,Android- _; Z" n9 w( m+ `, T. ]
[*,DemoInit----[font=宋体,初始化引擎* N) | K+ \0 S6 p1 t, H+ X
[*,Render----[font=宋体,渲染主逻辑
" g5 S, ~. y/ y5 y k& O[*,* H( {# M6 [7 L e, `
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用- A n+ W; {; Y* j" J. j: i: R# X
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib' J" A) R( k* M. } u3 f
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a9 ~4 `/ U* [- J. b- R; P
[*,! C2 `( k: O# M+ j- Q# Q
[*,然后使用:+ `4 u) e9 c' {: c% G- X F
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()
; A f$ J, {6 u5 W7 r* j, e[/list, [/td][/tr]
3 ?" z6 g% v9 X& n6 N8 @[/table]
' I: I* m; C& d; q' X8 o2 d% d
& F, x; c( C" ?
$ J6 S: e) e) S' h& J |