android 弹球碰撞



 本程序是实现了简单的android碰撞实例,通过绘制的一个小球(就是绘制的一个圆啦哈哈)然后通过碰撞检测与上下屏幕边缘的位置,实现简单的反弹。 不足之处就是:我直接用具体的数据了可移植性不好。自己可以改成变量然后赋值。注意一点就是反弹的长度即宽度的变小尺寸一定要是球的速度的整数倍!否则会出错。具体看代码
先上实现的效果。

这是所绘制的小球。初始时是圆形的。



 这是碰撞的效果。

下面给出主要代码:

package com.android.wwv;

import Interface.ban;
import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;
import android.text.BoringLayout.Metrics;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;

public class ActivityMain extends Activity implements ban,OnTouchListener,Runnable {
	 dangban ban;
	 int diswid,dishei,speedx=0,speedy=8;
	 Thread thread;
	 thisview view;
	 boolean left,right,uphui=false,downhui,upcan,downcan;
	  LinearLayout layout;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        thread=new Thread(this);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
       DisplayMetrics mt=new DisplayMetrics();
        getWindow().getWindowManager().getDefaultDisplay().getMetrics(mt);
        diswid=mt.widthPixels;
        dishei=mt.heightPixels;
        view=new thisview(this,ActivityMain.this);
        ban=new dangban(this);
        thread.start();
        layout=new LinearLayout(this);
        layout.setOrientation(1);
        layout.addView(view);
        layout.setOnTouchListener(this);
        setContentView(layout); 
    }   
 
	public dangban getban() {
	
		return ban;
	}

	public boolean onTouch(View v, MotionEvent event) {
		if(event.getAction()==MotionEvent.ACTION_DOWN){
		
			if(event.getX()<diswid/2){
				left=true;
				right=false;
				
				
			}
			if(event.getX()>diswid/2){
				left=false;
				right=true;
		}
				
		}
		if(event.getAction()==MotionEvent.ACTION_UP){
			left=false;
			right=false;
		}
	
return true;   
	
	}
public void collect(){
  
	if(view.fdown<=8||view.fup>=472){
		 
	        speedx=-speedx;
	        speedy=-speedy;  
     
	}
	    
}
		public void run() {
		while(true){
			collect();
			try {
				Thread.sleep(10); 
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			view.move(speedx,speedy);
			if(left==true)	ban.move(-5, 0);
			if(right==true)	ban.move(5,0);
		
	}
	}
}

 下面代码是绘制小球的java代码实现如下:

package com.android.wwv;

import Interface.ban;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.View;

public class thisview extends View implements Runnable{
 float ang=5.0f;
 int count;
 int rectx=150,recty,aphla,colorr,colorg,colorb;
 int fleft=150,fright=180,fup=0,fdown=30;
 Matrix matrix;
 Bitmap bitmap;
 ban mban;
	public thisview(Context context,ban b) {
		super(context);
	 bitmap=((BitmapDrawable) getResources().getDrawable(R.drawable.icon)).getBitmap();
	 this.mban=b;
	 matrix=new Matrix();   
	new Thread(this).start();
	
	}   

	@Override
	protected void onDraw(Canvas canvas) {
		Paint paint=new Paint();
		paint.setARGB(100, colorr, 200,200);
	
	   canvas.drawOval(new RectF(fleft,fup,fright,fdown), paint);
	    canvas.setMatrix(matrix);
	    mban.getban().onDraw(canvas);
		super.onDraw(canvas);
	}
    
	public void move(int x,int y){
	if(fup<=0&&fdown>=8){
	    fup=0;
	    fdown+=y;
	    if(fdown>=30)fup+=y;
	}
	else if(fdown>=480&&fup<=472){
	    fdown=480;
	    fup+=y;
	    if(fup<=450)fdown+=y;
	}
	else{
	    fdown+=y;
	    fup+=y;
	}
}

	public void run() {
		while(true){
	try {
		Thread.sleep(100);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
		postInvalidate();
	} 
		}


}

 

 以上便是该程序的主要的代码。这个小程序的精华之处是实现小球的碰撞的变型效果。开始时绘制椭圆时使用的是左顶点x,y和宽高可是这样效果不好实现。所以用了代码所示的方法相对简洁。

希望对android初学者有帮助谢谢!

 详细代码见附件。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值