1、android 模拟小球来回撞墙效果(游戏的开始)

本文深入探讨了Unity3D和Unreal Engine两大游戏引擎的使用技巧,包括动画、3D空间视频、AR特效、音频处理等核心技术。通过详细实例解析,帮助开发者掌握高效的游戏开发流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

先将代码贴一下

package com.ball;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(				//设置为全屏模式
        		WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        		WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(new BallView(this));
    }
}



package com.ball;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;


public class BallView extends SurfaceView implements SurfaceHolder.Callback {

	Bitmap bitmapBall = null;
	Movable movable = null;
	DrawThread dt;
	Bitmap bmpBack;
	
	public BallView(Context context) {
		super(context);
		getHolder().addCallback(this);
		initBitmaps(getResources());
		initMovable();
		dt = new DrawThread(this,getHolder());
	}

	public void initBitmaps(Resources r) {
		bitmapBall = BitmapFactory.decodeResource(r, R.drawable.icon);
	}
	
	public void initMovable() {
		movable = new Movable(0,0, 
				0, bitmapBall);
	}
	
	public void doDraw(Canvas canvas) {
		int color = getResources().getColor(android.R.color.white);
		canvas.drawColor(color);
		movable.drawSelf(canvas);
	}
	
	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		if(!dt.isAlive()) {
			dt.start();
		}
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		dt.flag = false;
		dt = null;
	}

}


 

package com.ball;

import android.graphics.Canvas;
import android.view.SurfaceHolder;

public class DrawThread extends Thread {
	boolean flag = false;
	BallView ballView;
	SurfaceHolder surfaceHolder;
	int sleepSpan = 30;
	
	public DrawThread(BallView ballView, SurfaceHolder surfaceHolder) {
		this.ballView = ballView;
		this.surfaceHolder = surfaceHolder;
		this.flag = true;
	}
	
	public void run() {
		Canvas canvas = null;
		while(flag) {
			try {
				canvas = surfaceHolder.lockCanvas(null);
				synchronized(surfaceHolder) {
					ballView.doDraw(canvas);
				}
			} catch(Exception e) {
				e.printStackTrace();
			} finally {
				if(canvas != null) {
					surfaceHolder.unlockCanvasAndPost(canvas);
				}
			}
			
			try{
				Thread.sleep(sleepSpan);
			}
			catch(Exception e){					
				e.printStackTrace();	
			}
		}
	}
}


 

package com.ball;

import android.graphics.Bitmap;
import android.graphics.Canvas;

public class Movable {
	int startX;
	int startY;
	int x = 0;
	int y = 60;
	int vt = 20; 
	int r;
	double timeX;
	Bitmap bitmap = null;
	BallThread bt = null;
	
	public Movable(int x, int y, int r, Bitmap bitmap) {
		this.startX = x;
		this.x = x;
		this.startY = y;
		this.y = y;
		this.r = r;
		this.bitmap = bitmap;
		timeX = System.nanoTime();
		bt = new BallThread(this);
		bt.start();
	}
	
	public void drawSelf(Canvas canvas) {
		canvas.drawBitmap(this.bitmap, x, y, null);
	}
}


 

package com.ball;



public class BallThread extends Thread {
	Movable father;	
	boolean flag = false;
	int sleepSpan = 100;
	boolean director = true;
	int lengthSpan = 10;	
	
	public BallThread(Movable father){
		this.father = father;
		this.flag = true;
	}
	
	public void run() {
		while(flag){
			if(father.x > 270) {
				director = false;
			} 
			if(father.x <= 0) {
				director = true;
			}
			if(director == true) {
				father.x = father.x + lengthSpan;
			} else {
				father.x = father.x - lengthSpan;
			}
			
			try{
				Thread.sleep(sleepSpan);					
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值