|
[table=98%,
4 B0 J* k. q3 ]" x% ]4 o[tr][td]1 u# b5 E: \; @1 y3 r# }
8 F0 R, X- L; I3 f: H& a& P; p[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,# }- u$ O2 U. P+ o4 g1 y6 H* _
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
# ^( w& A1 V- Y3 q( J# t[*,, a/ w4 ?6 a) v0 Q. S) T
[*,多点触控:5 `2 B: z) c/ w: u
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
- \, }, h! r% ^: S4 W" L: {[*,原理:, a& \* D0 |" j6 M1 R
[*,Int pointCount = event.getPointerCount();+ ~* b! L- ^& x M h6 r# l
[*,获取当前的点击个数。
! e. f% v3 N Z& F& N) v2 Y[*,ACTION_POINTER_1_DOWN
$ a0 W3 ^0 T3 ]$ I# A1 l: ?[*,ACTION_POINTER_2_DOWN2 A. S3 f$ T+ H. |% [) m% N
[*,ACTION_POINTER_3_DOWN
B0 b) \: B6 u* q! A+ ~- a[*,ACTION_POINTER_1_UP
8 v& ?8 o5 S& T1 g$ O; R[*,ACTION_POINTER_2_UP
( b+ g/ m$ T2 v* K[*,ACTION_POINTER_3_UP# d! O7 b8 m0 N$ @5 w! j# h
[*,ACTION_POINTER_1_MOVE3 f, h ^- t: X
[*,ACTION_POINTER_2_MOVE
: Q4 m1 Y' C7 {& Z& h[*,ACTION_POINTER_3_MOVE
: Y3 e: q+ v1 p& h# i# [& p! b[*,[font=宋体,获取各个点的事件响应
7 j" z9 |# H0 d" n9 n[*,7 q B9 w: J: S) n5 ?
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。
* k5 p, U# u0 T[*,[font=宋体,同理第二点也一样。& D0 m o9 \! R0 s, V/ i( n
[*,- P, X" x& k+ G
[*,2:[font=宋体,安卓生命周期
9 L6 l9 y- _) r! W& q) h' A[*,[font=宋体,默认的安卓生命周期为点击应用图标$ Y$ {# E- G5 `% a1 @
[*,OnCreat OnStart OnResume' {& m' R/ Y1 O# W- r
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
4 P# ^& [" c6 `0 G9 y[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.' \' a$ _+ \+ w5 v3 x
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到
4 w: w" Q' y* g& c3 B/ `2 m1 N[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
4 ], o, b5 t5 u; w[*,[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,就可以了不要让他走周期流程
" _2 I% z5 m8 s5 k6 K' [* s[*,8 [) o) N* w0 w
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏: [6 \+ \2 Q: X3 _
[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.: g8 Y. {5 T h* U$ g4 F
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的. ]. d$ s* V( I
[*,[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 j, a: c! G. ^[*,
D" N: I$ @8 P$ U# O# M$ s[*,[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,具体写法
; o7 U; p1 a6 j0 F7 z3 f; M[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加
% a9 g! X: s' E+ ~( [; o5 C5 b[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,+ k, n% r/ R, g" e
[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,1 H- D9 N7 m3 L, d% z
[*,android:screenOrientation=[i,"landscape"[/i,>9 d3 b5 \0 P2 U2 i% r- a9 v9 k
[*,- o- ~. U9 Z* t' u' W( p2 I$ e5 j
[*,
, F0 A" h8 c6 A; f$ M* P- J[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
0 x) @4 m" m6 l[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
4 u9 t' ?. X0 \% v[*,
9 l# s$ K$ g/ l7 L, ?[*,读权限
/ f ]; x# x( L" i; w; E[*,
# i1 O) c( d+ v; }" H/ W) C$ U' d[*,& V% e1 v- ~% f% ~, L( u
[*,写权限
) b/ Y M1 S3 k& r; C, Q[*,2 n8 z, A0 | g; i) l+ D3 F
[*,
# G) r* Y% L5 k" K: h1 m' V[*,电话接收以及监听权限
7 A7 @, ^. u+ `; C% I[*,
, x1 y' c5 K( `$ k! w$ H% ~8 W3 L* w0 Z[*,
* v8 V N6 [) g' k' V+ Y[*,短信接收以及监听权限9 b/ M$ D4 @# \& J
[*,8 c7 s) W# a( J( p. H( w
[*,% V& i$ ]/ o( E- F- W7 [
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
# Q2 L9 \: m' |[*,
; d6 T) A. g# o1 v+ C y: F[*,
3 ^# Q; S x0 a+ V; i* Y[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互# _) U) c6 P% F2 c8 S7 b8 d
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
. s5 A' R9 K n1 V+ V[*,[font=宋体,所以需要这种方式.& F6 W) S7 E/ T! `6 G. {% d( z1 A
[*,[font=宋体,在JAVA[font=宋体,中自定一个类
/ {5 z$ v! I! f* {4 M[*,Class MyData+ q( t$ v( O5 w3 k
[*,{
4 v* u$ G4 n* S[*,Public:' O/ j$ A7 I ?; v0 J8 w) Z
[*,Int a;/ C& `3 M7 B* |+ `' }5 M# A% J% S
[*,Int b;9 }& ?3 |2 y6 v# y# M
[*,Int c; x5 o; `9 _4 ]: M) c+ {7 n
[*,……..};; }( i3 [# Y# G* s! _5 ~
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明
- a+ I( j! D& t4 X+ M+ U[*,public static native void GetData (MyData data);
5 m1 ]6 `$ Y$ X! J8 v8 h A' Q+ p[*,JNI[font=宋体,层中声明
( `+ |! {+ d% g0 H# M/ U: ]$ b[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
$ R* V- _3 z5 S9 [7 }, W[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
! l4 P: J" d( W3 U* a( E[*,jfieldID sound = env->GetFieldID(cls, "a", "I");4 G/ {9 r$ o0 F- F) G( n% G* s: J7 Q8 ~
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
4 [; ]6 T5 s% x2 `# T3 ]( U: ]2 o[*,env->SetIntField(m_pdata, “a”, 5);" z3 R5 D" F/ h
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.
0 }; M0 }5 v7 s5 q% c0 r1 Y[*,1 f9 O& u' l9 _6 B# B! C1 x
[*,/ M8 a; T( I& n O) f4 }: e
[*,6:[font=宋体,工程搭建
6 |6 C: g1 }2 b[*,[font=宋体,首先编译引擎代码.& c+ b$ t R- K: t, r1 K, V
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
7 ~/ c( I; f" P ?- J[*,[font=宋体,需要重新 Cmake7 W: i: @7 A$ y. K% T2 Z( `
[*,[font=宋体,编译好代码后打开ZSDome8 N; D% s2 K" q) Q0 a9 n
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下
9 K6 E2 B8 r& h3 b[*,[font=宋体,然后直接直接运行即可.
2 T$ t% b% \: k2 a[*,# C9 C- I* W% T1 w3 p
[*,对应接口- e; ^& M5 M/ q o# o
[*,Android: Y* g: d5 n1 d7 W6 [- m
[*,DemoInit----[font=宋体,初始化引擎
- _0 ]" C; D9 C- R5 z0 k6 N[*,Render----[font=宋体,渲染主逻辑
1 z8 O% R* D/ @, s4 i[*,* T2 U# L% Y4 ]+ r
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
8 G- B, t7 g0 Q8 S# Y9 N* B[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib) M' K* @9 ?! L( J' c
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
9 i6 ?$ u! m2 C% d9 ]$ W[*,; v, k7 j6 V; f0 L4 O
[*,然后使用:$ W$ x+ g6 `3 _4 ~4 O# t9 h0 W" Z( j
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()% M; A& {8 h2 K" R. V. w
[/list, [/td][/tr]7 u/ e1 q. V9 n* K, s% l
[/table]
# Q' f4 m/ b F3 O
6 s3 e' l! Q" j D
% f8 E: {; i, c& D% ?( c5 o |