最近正在开发一款Android的游戏,这是我首次在Android上进行游戏的开发,没有使用那些开源的游戏引擎,因为只是一个很小的游戏,如果以后需要进行一些比较复杂的游戏开发,那就需要用到游戏引擎了。国人开发的LGame这个引擎很不错,配有文档和很多实例,还专门针对AVG进行扩展,例子、文档齐全,推荐使用。
先来说说我的心得吧。
首先我遇到第一个问题是游戏场景的切换。Android开发中,最主要的类就是Activity了,它相当于一个窗口,所以最先想到的游戏场景切换方式是进行Activity的跳转,也就是把每个场景都做成一个Activity,然后用Intent来跳转。但是Activity毕竟是一个特殊的类,它在运行过程中很多东西不好控制,比如传参以及将某些数据进行回传。所以推荐的的是,每个场景都是一个SurfaceView,切换场景就只是切换SurfaceView就行了。曾经上网查询过如何切换SurfaceView,但是没有结果。本人C语言程序员出身,所以想到的切换无非就是进行一个回调函数而已,那就简单了,JAVA同样能实现回调函数,JAVA没有指针,所以改用接口来实现,下面是一个例子。
接口:
public Interface IActivity
{
public Context getContext();
public changeView(View view);
}
游戏Activity:
public class Game extends Activity implements IActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//创建游戏SurfaceView
GameView gameView = new GameView(this);
}
@Override
public Context getContext()
{
return this.getApplicationContext();
}
@Override
public changeView(View view)
{
setContentView(view); //注意1
}
}
游戏SurfaceView:
public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
private IActivity iActivity;
public GameView (IActivity iActivity)
{
super(iActivity.getContext());
this. iActivity = iActivity;
}
//切换场景
public void changeView()
{
iActivity.changeView(this);
}
}
这下明白了吧,那个setContentView(view)(注意1那个地方)估计很多人会眼熟,是的,他都会出现在工程创建的那个Activity里,形式为setContentView(R.layout,main),setContentView这个方法就是Activity里,用于让窗口显示什么内容的方法,R.layout,main是一个布局XML,我们把它替换为我们自己的View就行了(View是SurfaceView的父类)。
第二个问题是View中长摁动作监听:监听触屏点击或者键盘点击相信很多人都明白了,就是在View或者Activity中覆盖(Override)onTouchEvent这个方法,但是这个方法在Activity与View中有些区别。TouchEvent这个方法是boolean类型,在Activity中返回类型是false,表示
监听不结束,持续监听,这样就能监听到长摁事件了。但是在View中,很多人一开始会遇到只监听到MotionEvent.ACTION_DOWN,无法监听到MotionEvent.ACTION_UP事件,也就是无法监听到长摁事件,用户一点击屏幕就完成了监听。解决这个办法很简单,在这个覆盖的方法里,返回一个true就能监听长摁事件了,具体原因我也不清楚,说实话,Android还有很多东西我没吃透,欢迎有识之士能指点一二。
相关推荐
在处理多个SurfaceView的切换时,可能会遇到一些问题,这些问题可能与SurfaceView的生命周期、渲染机制以及线程管理有关。下面将详细讨论这些问题及相应的解决策略。 1. **SurfaceView的生命周期管理**: ...
在Android平台上进行游戏开发,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形绘制提供了可能,尤其适合用于创建动态、高性能的游戏画面。本文将深入探讨如何利用SurfaceView进行游戏开发,以及与之相关...
在安卓开发中,`SurfaceView` 是一个非常重要的视图组件,它允许开发者在应用程序中创建一个独立于窗口管理器的表面,这个表面可以用于显示持续更新的图像,如视频播放或者游戏画面。`SurfaceView` 提供了一个优化的...
在Android开发中,`SurfaceView`是一个非常重要的视图组件,尤其在处理视频播放、游戏渲染等高性能图形操作时,它的优势在于拥有独立于主线程的渲染机制,能避免阻塞UI更新。然而,由于其特殊的性质,直接通过常规...
在Android平台上开发游戏时,SurfaceView是一个至关重要的组件,它为高效、低延迟的图形渲染提供了可能。SurfaceView是Android系统提供的一种特殊视图,它有自己的独立绘制表面,与主线程分离,使得游戏或者视频这类...
在Android平台上构建游戏框架时,开发者常常会遇到两种主要的视图组件——View和SurfaceView。它们虽然都属于Android视图系统的一部分,但在处理高性能、低延迟的图形渲染时,两者有着显著的区别。 首先,我们要...
在Android开发中,SurfaceView是一种特殊的视图组件,主要用于处理高性能、低延迟的视频或图形渲染,例如视频播放、游戏画面等。然而,在实际应用中,可能会遇到一个问题:当有多个SurfaceView需要切换显示时,可能...
在Android开发中,有时我们可能需要创建一个独特的用户体验,比如设计一个圆形的相机预览窗口。这个场景就涉及到了Android的SurfaceView以及如何定制它的显示效果。本文将深入探讨如何实现一个圆形的相机预览窗口。 ...
在Android开发中,View和SurfaceView是两种非常重要的视图组件,它们被广泛用于构建用户界面和处理图形绘制。这两个类都是Android系统提供用来显示动态内容的机制,但它们之间存在一些关键的区别。 **View组件** ...
在Android平台上开发游戏时,SurfaceView是一个非常重要的组件。它提供了低延迟的显示功能,并且支持双缓冲机制,这对于实时渲染图像非常关键。相比于传统的View组件,SurfaceView在性能上有着显著的优势。 #### 二...
Android123做的一个关于Android游戏开发的教程 1.Android游戏开发之旅一 长按Button原理 2.Android游戏开发之旅二 View和SurfaceView 3.Android游戏开发之旅三 View类详解 4.Android游戏开发之旅四 Canvas和...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建一个独立的、高性能的绘图表面。SurfaceView通常用于视频播放、游戏或者需要频繁更新图像的场景。然而,有时候当我们尝试在SurfaceView...
总之,Android游戏开发中的View框架是一个综合性的主题,涵盖了图形绘制、事件处理、布局设计、动画制作和性能优化等多个方面。掌握好这些知识点,能够帮助开发者构建出高性能、富有吸引力的Android游戏。
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理视频播放或游戏等需要连续刷新的场景。本话题主要探讨如何利用SurfaceView实现图片的缩放和滑动功能。 首先,理解...
在Android开发中,View和SurfaceView是两种常用的用于在屏幕上绘制图形和处理用户交互的组件。它们在构建游戏框架时尤为关键,因为游戏通常需要高效地更新和渲染图像。本Demo旨在展示如何利用这两种组件来创建一个...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者在应用程序中创建高性能的图形界面,比如游戏或者视频播放器。SurfaceView具有自己的绘制表面,与主线程分离,因此可以进行独立于UI线程的高性能渲染。...
在Android开发中,多媒体播放是常见的功能之一,`MediaPlayer` 和 `SurfaceView` 的结合使用是实现视频播放的标准方式。本篇文章将详细讲解如何利用这两个组件来构建一个视频播放器。 首先,`MediaPlayer` 是...
在Android开发中,SurfaceView是一种特殊的视图,它允许开发者创建高性能的图形界面,尤其适合处理视频播放、游戏等需要连续刷新的场景。本压缩包资料主要探讨如何在SurfaceView中添加其他组件,并确保这些组件不会...
在Android游戏开发中,将一个`Button`控件悬浮于`SurfaceView`之上是一项常见的需求。这通常是为了解决在游戏界面中添加交互元素,如暂停、设置或返回按钮,以便用户可以随时进行操作。本篇文章将深入探讨如何实现这...