安卓飞机大战(二) SurfaceView实现自制背景

用SurfaceView写一个自制的背景图,并且可以移动,加上安卓飞机大战(一)中的BackgroundManager类,可以直接使用

GameView代码:

public class GameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{
    private SurfaceHolder hd=null;
    private Canvas canvas=null;
    private BackgroundManager backgroundmanager;

public GameView(Context context) {
        super(context);
        this.setFocusable(true);
        hd=this.getHolder();
        hd.addCallback(this);
    }

public void run() {
        while(isrunning){
            mydraw();
            try {
                Thread.sleep(100);//每100s刷新一次屏幕
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
    }
    public void mydraw(){
        try{
            if(hd!=null){
                canvas=hd.lockCanvas();
                canvas.drawColor(Color.BLUE);
                backgroundmanager.drawbackground(canvas);
               }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(canvas!=null)
        hd.unlockCanvasAndPost(canvas);
        }
    }

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub
        
    }

public void surfaceCreated(SurfaceHolder arg0) {
        thread=new Thread(this);//定义一个新线程
        thread.start();
        backgroundmanager=new BackgroundManager(this);
    }

@Override
    public void surfaceDestroyed(SurfaceHolder arg0) {
    }

MainActivity 代码:

public class MainActivity extends Activity {

private GameView gameview=null;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        gameview=new GameView(this);
        setContentView(gameview);
    }

这样就能实现背景的循环移动了,layout中的xml文件直接不用管。

时间: 08-14

安卓飞机大战(二) SurfaceView实现自制背景的相关文章

安卓飞机大战(一) 背景移动

在制作游戏时,背景可以移动,原理就是    两张图片的循环移动. package com.example.manager; import com.example.agame.R;import com.example.entity.Enemy; import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Rect

安卓飞机大战(四) 实现从MysurfaceView到 Activity的跳转

从一个Activity到另一个Acitvity是简单的 但是怎么从自己写的surfaceview跳转到一个Activity呢? 在 MysurfaceView (extends SurfaceView)中: public class GameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ private Context context=this.getContext(); private boolean e

安卓飞机大战(五) 飞机瞬移的解决方法

在游戏开发时,角色可以随手指移动,但是当手指移动到屏幕另一个位置时,角色可以瞬移 解决方法如下: 在手指触摸屏幕时进行判定,如果手指点到了角色并且在屏幕上进行滑动,角色才移动 具体代码如下: 定义一个值a 当手指点到了角色并且在屏幕上进行滑动,a的值变为1,当手指离开屏幕,a的值变为0,当a=1时角色才进行移动. if(event.getAction()==MotionEvent.ACTION_DOWN&&event.getX()>=myplane.x&&event.

安卓飞机大战(六) 动态Gif图的添加

有两种方法 第一种  麻烦,需要把一张gif图分解帧,然后将帧一张一张绘制,很麻烦. 第二种,可以直接在网上下载一个drawable.gif 包 包里libs文件夹下有以下文件 将这些文件全部复制到你写的安卓程序的libs文件夹下(有两个没用,不过没关系,都复制进去就行),这样gif 包就完成了,接下来就可以添加gif图片了!! 新建一个Layout <?xml version="1.0" encoding="utf-8"?><LinearLayo

安卓飞机大战(八) 添加视频文件

在安卓应用里添加一个视频文件,需要在res中添加一个名为raw(不能乱起)的文件夹,里面存放你要播放的视频文件 代码如下: 1.在lanyout中添加一个videoview <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_

安卓飞机大战(三) 弹出对话框

在游戏时,不管是退出游戏还是选择战机,都要弹出一个对话框,需要以下代码 按一个按钮弹出对话框 Layout文件:(添加一个按钮) <Button        android:id="@+id/button1"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="准备起飞

安卓飞机大战(七) 存储用户数据并实现增删改查

将用户的数据进行存储,利用SQLiteOpenHelper 1.建一个mysqlhelp类,扩展自SQLiteOpenHelper import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper

android:如何用一天时间,写出“飞机大战”这样的游戏!(无框架-SurfaceView绘制)

序言作为一个android开发者,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的.体验地址:http://www.wandoujia.com/apps/edu.njupt.zhb.planegame游戏分析玩过"飞机大战"游戏的都知道,飞机大战中的主要"角色"有:1.玩家飞机2.敌方飞机3.玩家飞机发送的子弹4.敌方Boss飞机发送的子弹我们需要控制的有:1.绘制屏幕内的角色2.控制角色的逻辑,比如:敌方

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人都要崩溃了. 最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem.如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错.老版本的果然又不完善的地方,整个人都不好了...果断修改引擎里的源