本程序是实现了简单的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初学者有帮助谢谢!
详细代码见附件。
- 大小: 4.2 KB
- 大小: 75.8 KB
分享到:
相关推荐
【标题】:“简陋android弹球游戏” 这个项目标题揭示了我们正在讨论的是一个基于Android平台的简单游戏,称为“弹球游戏”。Android是Google开发的开源操作系统,主要用于移动设备,如智能手机和平板电脑。开发者...
总结起来,实现Android的弹球效果需要结合动画、物理模拟、碰撞检测等多个方面知识,通过合理的编程技巧和优化手段,可以创建出既美观又流畅的弹球游戏或交互元素。在实际项目中,可以参考现有的开源项目,如使用Box...
【Android 弹球小游戏】是一款基于安卓平台的简单游戏,主要设计用于开发者进行技术实践,尤其是对于初学者,它提供了一个学习和理解Android开发中关键概念的实例。这款游戏的实现涉及了多个Android开发的重要知识点...
本项目"Android弹球效果的实现"就是一个很好的实例,它通过自定义View展示了逼真的弹球运动效果,同时还能自适应屏幕尺寸,提供良好的用户体验。 首先,我们要理解这个项目的核心——自定义View。在Android中,...
【Android Studio小游戏:弹球小游戏】是基于Android开发平台,使用Android Studio集成开发环境创建的一款简单而有趣的休闲游戏。这个游戏通常包含一个弹球和多个障碍物,玩家通过控制挡板来反射弹球,避免弹球掉落...
弹球效果需要模拟物理中的弹性碰撞,所以我们需要在动画结束后再次反向执行相同的运动。可以通过添加`animation-list`并在其中包含两个`objectAnimator`来实现。或者,可以使用Java代码动态控制动画的反向播放。 4...
"小球往下弹球碰撞"项目就是一个很好的例子,它展示了如何在Android环境中实现真实的弹球碰撞效果。这个项目的核心是通过自定义绘图和物理引擎来模拟小球的运动轨迹和碰撞反应。 首先,我们要理解的是Android的...
【AndBall: Android弹球游戏】是一款基于AndEngine游戏开发引擎构建的移动平台游戏,主要由张舒贤、张俊、邬文怀和叶菁菁四位贡献者共同开发完成。这款弹球游戏专为Android系统设计,兼容从版本8到版本22的设备,为...
标题中的“android弹球动画property属性动画(自定义动画拼接)”涉及到的是Android的Property Animation API,这是一个强大的工具,允许开发者创建更加灵活和复杂的动画效果。相比传统的Tween Animation,Property ...
在Android平台上,开发一款弹球游戏是一个典型的移动应用开发实例,可以帮助开发者深入理解Android游戏编程的基本原理和实践技巧。本文将详细探讨如何利用Eclipse IDE进行Android开发,创建一个简单的弹球游戏。 ...
总的来说,"Android弹球游戏"的源码提供了一个全面的Android游戏开发实践案例,涵盖了基础的Android组件使用、图形绘制、碰撞检测、游戏逻辑和模式设计等多个方面。对于初学者来说,深入研究这个源码不仅能学习到...
《Android平台下的目标弹球小游戏开发详解》 在Android平台上,开发一款小游戏是开发者们实践技术、提升技能的常见方式。本文将详细解析一个名为"目标弹球"的小游戏,这款小游戏展示了Android游戏开发的基本技术和...
本文将深入探讨如何在Android中创建一个简单的碰撞检测系统,并实现小球与屏幕边缘碰撞后产生弹球般的变形效果。 首先,我们需要理解碰撞检测的基本原理。在2D环境中,最基础的碰撞检测方法是矩形与矩形的碰撞检测...
在Android游戏开发中,JBox2D可以帮助开发者创建复杂的物理交互,如重力、碰撞检测和响应、刚体动态等。通过这个项目,你可以了解到如何在Android环境中集成和使用物理引擎,以及如何定义物体的属性(如质量、形状、...
5. 弹球碰撞检测: 当弹球与挡板或其他游戏元素碰撞时,需要计算碰撞角度并更新弹球的运动轨迹。这通常涉及到几何计算和物理模拟,例如使用矢量运算来计算碰撞后的速度方向。 6. 更新游戏状态: 在每次挡板或弹球...
总的来说,"google官方demo弹球动画"是一个很好的学习资源,它涵盖了Android动画系统、物理模拟、碰撞检测以及性能优化等多个关键知识点。通过深入研究这个Demo,开发者不仅可以掌握Android动画的基本用法,还能了解...
《弹球Block It》是一款融合了物理弹射与策略元素的休闲游戏,它同时支持iOS和Android两大平台。源码的公开提供了开发者深入学习游戏开发的机会,尤其是对跨平台游戏开发感兴趣的程序员。在这个项目中,我们可以看到...
例如,在一个简单的弹球游戏中,我们可以通过矩形与圆形的碰撞检测判断球是否碰到墙壁或障碍物,从而改变其运动方向。 最后,如果你想要深入了解并实践这些知识,可以参考提供的链接:...
当弹球与墙壁或其他物体发生碰撞时,监听器会接收到通知,然后根据碰撞的法线方向计算出新的速度,使弹球按照物理规则反弹。 在实际编程过程中,我们需要对用户输入做出响应,例如控制弹球的发射方向和力度。这通常...
弹球的运动轨迹、碰撞检测和反弹效果都需要在这里实现。为了创建流畅的动画,你可能还需要使用`postInvalidate()`来触发重绘。 5. **游戏逻辑**:弹球的运动由物理规则控制,比如重力和弹性碰撞。你需要编写计算...