|
[table=98%,4 Q W) h1 }% x2 R7 J
[tr][td]
- M& i1 i1 F- E, V% u9 s- Y* h/ h c# n$ ^4 {. ^
[color=#939ead,[color=#939ead,架设说明 [color=#939ead,[list,4 k8 w. H, J' G6 ^# }# F% D: ?" {
[*,1[font=宋体,:安卓开发中所遇到过的一些问题以及解决方案& J# c" {# P) z5 ~0 g$ _5 D
[*,2 P# Y# R+ Y. ?' O7 y
[*,多点触控:
; z& @4 w8 F' v9 p8 }[*,[font=宋体,安卓API[font=宋体,默认最高支持[font=Calibri,3[font=宋体,点触摸。
$ a/ B/ S; t9 h' N[*,原理:8 a( \7 U2 g( _2 N/ R1 N6 g
[*,Int pointCount = event.getPointerCount();
, c9 P+ q- u1 o) O0 b/ E: }[*,获取当前的点击个数。
4 p# |+ a. U9 _$ ?# l7 X7 Z6 h[*,ACTION_POINTER_1_DOWN. U9 E& s" X. D
[*,ACTION_POINTER_2_DOWN. G5 \: v" K% ?2 O% d. M) R0 M
[*,ACTION_POINTER_3_DOWN
, ^: G ]' h* K" J[*,ACTION_POINTER_1_UP
6 B% L' X3 U9 u6 Y[*,ACTION_POINTER_2_UP2 u0 X' I" {( v7 n: H
[*,ACTION_POINTER_3_UP
# O1 U& h$ d6 M[*,ACTION_POINTER_1_MOVE
* G) h5 a* N# u) V. w4 e( p[*,ACTION_POINTER_2_MOVE
{( \6 z q0 |2 C[*,ACTION_POINTER_3_MOVE8 C4 h# E( J3 x
[*,[font=宋体,获取各个点的事件响应
9 v% H1 t! I7 T) [: H: O, p2 M[*,' O5 a5 Y* M) Z& L1 o) P* w
[*,[font=宋体,当玩家点击地一个点时,如果没有抬起操作那么就一直响应第一点操作。0 ^( `2 h. N U
[*,[font=宋体,同理第二点也一样。
. y( L+ @' U) P* A( H2 b" [[*,
% u( O; U0 n( f% v- _/ x) u- A" y[*,2:[font=宋体,安卓生命周期( @& f- x6 Q4 F8 U( F' n
[*,[font=宋体,默认的安卓生命周期为点击应用图标2 ?7 s x' O2 j# w) D: P
[*,OnCreat OnStart OnResume
F J; O) R- k, z2 c[*,Back[font=宋体,键默认为走[font=Courier New,OnDestory. l) v3 [9 g! M# B, j- p9 D
[*,[font=宋体,一般我们会选择屏蔽掉 Back[font=宋体,键[font=Courier New,.: x. C+ f" v1 a8 w) j
[*,[font=宋体,原因很简单,[font=宋体,在很多手机游戏中假如玩家收到电话事件和短信事件[font=Courier New,,[font=宋体,是会被弹出[font=Courier New,,[font=宋体,游戏进入到% S! j: J; }& [7 D7 ^$ ]. A
[*,Onpause[font=宋体,然后你点击[font=Courier New,Back[font=宋体,键的时候就会导致Activity[font=宋体,走到了OnDestory;
- j" q7 V- L, Q: p& r[*,[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,就可以了不要让他走周期流程
T' A+ b+ S! i+ f[*, V# [* t$ a o( k
[*,3:[font=宋体,[font=宋体,[size=10pt,安卓强制横屏
5 D2 {: F& P% n4 R1 N% f. V- a[*,[font=宋体,[font=宋体,[size=10pt,很多游戏中是需要横屏的." a8 E. Q0 x1 {# y! w
[*,[font=宋体,[font=宋体,[size=10pt,在代码中添加强制横屏这种做法是不行的.
& t; x) X9 C7 l% N0 q$ O* C' n[*,[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,., T" W- L# c/ j" ]. N& \' E5 C6 x
[*,. z+ y" ?+ z% F+ u! Z% 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,具体写法0 ?0 `! l- G6 F& L5 u0 q
[*,[font=宋体,[font=宋体,[size=10pt,在XML [font=宋体,[font=宋体,[size=10pt,中添加 | g2 ~" \$ |
[*,android:configChanges=[i,"orientation|keyboardHidden"[/i,
1 {$ a9 A+ G2 ?7 x- @' D[*,android:theme=[i,"@android:style/Theme.NoTitleBar.Fullscreen"[/i,; o! x; n( i+ R) [" h& t: Y# q. L
[*,android:screenOrientation=[i,"landscape"[/i,>1 I) v& H1 S4 U: I
[*,, v' ]- E. c% U+ \& k# A4 F
[*,% \0 w1 b. X, v& M8 I# \* g
[*,4:[font=宋体,[font=宋体,[size=10pt,读写权限以及其他权限
: a4 t. @$ I* J( c, G! C* j[*,[font=宋体,[font=宋体,[size=10pt,安卓中的读写SDK[font=宋体,[font=宋体,[size=10pt,里面的内容是需要添加权限的具体的常用权限以下归类# i F* E0 s0 W- |4 P- b9 ?
[*,) n* V6 }3 Q g. H8 [3 y# v
[*,读权限) w" V% V, X$ x+ `7 H
[*,
9 a) H( T8 e7 x4 M1 R2 Z0 ?) x[*,/ C% J. ^8 D ?* Z* P) W8 W7 F" ?
[*,写权限
3 y4 w) B. E1 {4 x; F[*,
6 j: D6 v6 G4 x3 k% u9 F) p[*,
% A U: `2 x$ |3 p3 N[*,电话接收以及监听权限1 U8 X0 s% T( Z" A
[*,
3 |3 @" @0 c$ X[*,
% O2 |) T* ~) k( F8 z[*,短信接收以及监听权限9 U/ l7 W& f& @
[*,9 E l& n" T: P$ D0 [* c2 s) Q/ D
[*,' N) c9 a+ |+ R
[*,[font=宋体,网页事件,[font=宋体,用与在游戏中打开网页- V% O9 t8 l# s; z/ Q* h
[*,0 n3 Z# V7 o, K0 T3 G3 U( }
[*,
2 p4 R0 x& Q) d" q+ J[*,5:JAVA[font=宋体,层自定义类和[font=Calibri,JNI[font=宋体,层交互+ k) ~. f; h, C
[*,[font=宋体,有的时候JAVA[font=宋体,层需要传很多参数给[font=Calibri,JNI[font=宋体,如果参数太多会导致代码太多维护麻烦[font=Calibri,.
- T1 }" c# y8 E5 r/ Y[*,[font=宋体,所以需要这种方式.
* u# X% }9 Y! X[*,[font=宋体,在JAVA[font=宋体,中自定一个类
9 ]# k& E6 t+ D0 k: i1 L8 Y6 N[*,Class MyData: f- b" P' O/ s) u5 U/ z
[*,{
; h9 X8 c a" o! v. l2 `[*,Public:: k* m# A4 ]2 `- I
[*,Int a;
: ^9 @+ D5 @% N, p# O5 ][*,Int b;- d7 g" l+ a* J
[*,Int c;2 ?. e6 B. \" C2 V' a
[*,……..};& Y+ ?3 P- X# N
[*,JAVA[font=宋体,层中[font=Calibri,native[font=宋体,函数申明* b$ |. C4 x2 O( V$ \/ F6 P& c
[*,public static native void GetData (MyData data);
% p& ` m7 B& _* D1 A3 G[*,JNI[font=宋体,层中声明
$ ^" U: {# H! B: S[*,JNIEXPORT void JNICALL Java_com_perfect_zsdemo_LordJNILib_ GetData(JNIEnv *env, jobject obj,jobject m_pdata)
8 D q3 ^6 R$ P9 r/ t; D2 j( O[*,//[font=宋体,获取[font=Calibri,a[font=宋体,在[font=Calibri,JAVA[font=宋体,中的赋值7 x6 C" D- l3 @$ c# p2 I6 x7 T% {% \
[*,jfieldID sound = env->GetFieldID(cls, "a", "I");* s4 ]/ Q( l; p0 @
[*,//C[font=宋体,层给 [font=Calibri,JAVA[font=宋体,层赋值. h1 c, d5 {4 W4 t) p
[*,env->SetIntField(m_pdata, “a”, 5);8 E5 {" I. u4 q4 h1 }1 N1 i
[*,[font=宋体,注意第二个参数要对应JAVA[font=宋体,类定义时的声明不能搞错[font=Calibri,,[font=宋体,否则就会挂掉[font=Calibri,.9 Q0 D6 S2 w. L# `7 G4 ^7 H1 \
[*,
( h" A. J4 @& y! S5 r' I% r$ f[*,2 x- d$ d0 b! }7 G9 I, F
[*,6:[font=宋体,工程搭建+ p0 Q# q6 f6 f$ W2 t" T0 J
[*,[font=宋体,首先编译引擎代码./ S6 \! a( Z- p* F! L& H
[*,[font=宋体,代码中新添加了GameClient[font=宋体,目录[font=Calibri,.' g" f6 C4 d0 }5 `9 M
[*,[font=宋体,需要重新 Cmake
% b; S4 m, f. v( J; ^[*,[font=宋体,编译好代码后打开ZSDome) F6 F+ [$ F6 A
[*,[font=宋体,将GameClient[font=宋体,目录中的[font=Calibri,JNI [font=宋体,拷贝到[font=Calibri,ZSDome[font=宋体,工程目录下& P8 r5 ~) I& f! }$ w
[*,[font=宋体,然后直接直接运行即可.
8 X: h, o4 M% c; [4 P[*,
4 q* y4 `" Y9 Y' i* b[*,对应接口) F/ y, L5 Z) J0 m) ~
[*,Android
: B- L+ o D, U5 X2 h+ ][*,DemoInit----[font=宋体,初始化引擎
" d/ {1 i$ s- t4 J" Q[*,Render----[font=宋体,渲染主逻辑
9 W: _7 @$ n% c[*,6 [+ }8 ~6 N H9 m/ S) d- m. v4 Y
[*,7[font=宋体,:[font=Courier New,BBZS[font=宋体,客户端的使用- F' ~; c; @4 t% P/ j" q% |
[*,[font=宋体,首先CMAKE GameClient[font=宋体,,完了之后,如果是[font=Courier New,windows[font=宋体,平台,会成[font=Courier New,libLordGameClient.lib9 O3 l) K2 Y6 Q! v: p$ u+ L6 R1 u
[*,[font=宋体,如果是android[font=宋体,或者[font=Courier New,ios[font=宋体,,会生成[font=Courier New,libLordGameClient.a
i( u" ~1 m" m4 r, `[*,
6 ^& H' C" {8 |( ?$ }: P+ M/ Y[*,然后使用: L0 f1 G0 x8 u, U
[*,[font=宋体,游戏主逻辑在Game[font=宋体,里面,提供初始化接口[font=Courier New,init()[font=宋体,,消息响应接口[font=Courier New,MsgOneHandle[font=宋体,和[font=Courier New,MsgTwoHandle[font=宋体,,主渲染和处理接口[font=Courier New,Logic()1 `- Q$ z# M4 ]1 @
[/list, [/td][/tr]) \! \# h8 k' d( x3 O3 h
[/table]; f4 c1 @4 L& L, B
4 B: B2 M* N; `( r9 k" f) \+ R) T/ @4 ?0 n! z ?
|