|
[table=98%,
; q) h5 U- W! h0 ?' p0 C[tr][td]
/ `% X$ p6 r( g: Z. z5 @; M' R3 {# I4 n F
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,
/ U$ d1 w! f. @8 ]- B6 o[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案
4 d2 ]+ f; v2 j) K, i# W[*,
, Z$ R' w' ?; ^+ g[*,多点触控:# R/ g, z8 Q- f; j' @+ C. Z% k
[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。* w$ J8 H5 \' V' m
[*,原理:
~& V. b; ]4 w7 _! s[*,Int pointCount = event.getPointerCount();% ^. R0 N8 d" d3 s, ~1 p W
[*,获取当前的点击个数。
7 {. `; j2 j! q; o[*,ACTION_POINTER_1_DOWN& k b; x6 h" v3 j+ c* `
[*,ACTION_POINTER_2_DOWN
K7 h2 k3 h+ s! k# X- b[*,ACTION_POINTER_3_DOWN
3 ^% ^# o2 f& v$ ^1 L[*,ACTION_POINTER_1_UP3 n" {1 D. v0 ]
[*,ACTION_POINTER_2_UP9 p; G4 F# Z2 c7 c' D+ c C& t
[*,ACTION_POINTER_3_UP, y8 J. L: s# v$ p
[*,ACTION_POINTER_1_MOVE+ G, d# J1 N' J; S) Q) ]
[*,ACTION_POINTER_2_MOVE4 q E+ }* F+ w% E! ?6 F/ G* G
[*,ACTION_POINTER_3_MOVE
, ?4 D( w1 M+ b1 z% q" H8 X[*,[font=宋体,获取各个点的事件响应5 l& E* T5 J) |( R7 L* W6 s
[*,! P) o, j% b( T. J
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。) t5 v1 v1 l. o. l
[*,[font=宋体,同理第二点也一样。" Z% j1 C- J4 L7 I4 y
[*,$ O% p2 ~0 k3 P6 j; n' \" ^) H
[*,2:[font=宋体,安卓生命周期
( F, Y, h) e4 s/ ^[*,[font=宋体,默认的安卓生命周期为点击应用图标
* T' w6 w5 O4 G5 O, ^/ ][*,OnCreat OnStart OnResume5 _, ]/ @( h- E# S, l! E1 g4 J0 u; g
[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory
/ | @3 I/ ~! b- K0 U& m" O[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.0 j9 u% y. U% q! M2 N
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到7 V8 B5 ^& Y, u$ ~) T
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
8 i+ i! l* B- X8 V[*,[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,就可以了不要让他走周期流程
6 s) I! ~ U8 K/ v# O" _7 y5 a[*,
9 M' f3 S1 | i: q$ W' m9 t' p6 M[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
- W( w9 U. ~+ ], `& G0 S8 M5 Q[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的.
; }, i9 \8 W" n! L/ ^! B. A[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.6 s% A3 Y4 M6 e+ B r M, r
[*,[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 N3 b% g. ~' J+ f, O) w
[*,1 e& E% n1 M( ?1 x
[*,[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 k+ N- q6 r0 Y( {4 _3 {6 T
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加- M8 K# q' d, p1 Y) r; \/ [+ b, }0 f
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
! b; P) T2 O# Q& z[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,2 i" I* m( U* @. B. H+ A7 u
[*,android:screenOrientation=[i,"landscape"[/i,>
% o1 ^* g6 ^ H[*,
( |5 s- \& B& s1 b8 N: `- L3 n* N[*,
# P: j3 d0 Q3 |/ i[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限- m. G) V+ x, h$ A
[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类
2 L& U7 Z6 C1 T1 T" `2 O" i[*,
1 X" h4 @+ v/ O7 b8 l. S[*,读权限
$ O8 B2 A( @2 t7 z. \[*,1 ]: `: l0 E9 X7 _6 A
[*,
; W& v; k, q" e& x& u2 P) O[*,写权限1 z+ X" q+ J, z2 n0 J* Z2 B. f
[*,
* P: m" U4 ^ f% H; D[*,
$ j) y7 Y" R' f1 D[*,电话接收以及监听权限
: J& ~3 X1 k$ k @. O% j[*,0 D0 j3 O% f' u d8 T0 Z
[*,
# }8 W9 c6 G) X2 l* i% u[*,短信接收以及监听权限" D6 }* B" \" z
[*,
5 y$ `; h5 Z& A[*,
% Q- S% ]- Z9 R' ]: C[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页
$ B8 F! R3 E( ~3 B" N[*,9 \9 U' @! Q& G" L! ?( \
[*,2 I7 U4 L& a0 s+ p' z6 z
[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互
+ U1 E, b+ Z& a$ b[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
- S7 I1 ~* u6 ?- _. B* r[*,[font=宋体,所以需要这种方式.
4 Z1 F+ l" R5 x" ?: I[*,[font=宋体,在JAVA[font=宋体,中自定一个类
( H/ }& \7 r. m$ S- f* z[*,Class MyData! f2 H. |; |0 g3 O8 J$ [, J
[*,{
7 H# H. r0 p& K8 q$ W% e4 ]# y, v[*,Public:
8 w! A" x2 Q9 W/ C2 m% L[*,Int a;6 }1 U$ m2 J2 v' P) K$ Q. h; h' |
[*,Int b;
+ U* i% R( v( _1 F+ l[*,Int c;
5 d. {4 Z. s. h$ i) m4 U2 R[*,……..};
. M! [) C8 Z j" @: I[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明 P$ K* V7 O; V8 C7 f5 {
[*,public static native void GetData (MyData data);$ x" J7 z0 h8 d* I
[*,JNI[font=宋体,层中声明
! q+ s( w4 z, H" R$ X) r/ ~% [[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
4 @9 G' r' S3 y: S N[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值
# W c# b1 C7 y4 ? G; ^2 ^[*,jfieldID sound = env->GetFieldID(cls, "a", "I");2 z e- w4 n( Z/ Y- \, E9 s
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值
# a! V% H5 G8 ]8 J' }, g[*,env->SetIntField(m_pdata, “a”, 5);
3 c: C+ p* q% Z7 W* p( M( p* ` J[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.! L# l l) a. C, m! u6 O- N
[*,
3 [3 ]3 Z1 ]3 ^$ r. W$ A' F6 Q* O[*,
( }) g1 W- h, |6 [# N* y7 U[*,6:[font=宋体,工程搭建/ n) s' O$ r$ x& [" W
[*,[font=宋体,首先编译引擎代码.2 E5 W" z3 Z7 [
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.
" ^. O. P' e% R; T8 B( @( P9 N, G[*,[font=宋体,需要重新 Cmake( i1 {' L8 t, Z- E* N4 m
[*,[font=宋体,编译好代码后打开ZSDome2 |3 K' ~8 D. _7 @: q( E, Z5 A
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下; `8 F% j; n( J' _5 E, c
[*,[font=宋体,然后直接直接运行即可.) P4 ?& a0 B7 ^3 B/ f% E
[*,2 E3 I+ Q; \7 Z; G, q
[*,对应接口
4 I Q: b& F6 _& A) g3 C# l- h[*,Android% j3 U( F/ L* i0 i; U: e# t
[*,DemoInit----[font=宋体,初始化引擎6 L+ Q4 d: c6 C% V, q# {& Q
[*,Render----[font=宋体,渲染主逻辑: Z& \8 r) J: n9 I/ Y
[*,
6 S$ K2 j2 p9 O/ A- Y) l: ]1 o, [- ?[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用
- s) o$ E, y& ^4 q2 H* E[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib
- M6 S9 n- |; ]4 e# i[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
3 X3 n* g) K; C- P3 ~; [& Z* U[*,7 }/ Z* H, S* w/ i- Z9 F7 O/ |$ H7 o
[*,然后使用:4 L0 s9 m7 e! s$ D# t/ E& @6 ?
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()) W! P, Z. i7 t7 s
[/list, [/td][/tr]
/ h! V" U$ {1 S" \8 J9 C[/table]
6 {/ v( q2 B' m7 l% Y2 g
* S9 ^; r& S, `! [5 D2 {
: i% W+ p5 l( q( g8 H% C% n: X" L3 v |