canvas教程

JBox2d入门学习二 我的小鸟(2)

字号+ 作者:H5之家 来源:H5之家 2015-11-11 13:47 我要评论( )

public void createball(float x,float y,float radius) { PolygonDef shape = new PolygonDef(); shape.density = 10f; shape.friction = 0.5f; shape.restitution = 0.3f; shape.setAsBox(10*density/RATE, 10*de

public void createball(float x,float y,float radius)
{
PolygonDef shape = new PolygonDef();
shape.density = 10f;
shape.friction = 0.5f;
shape.restitution = 0.3f;
shape.setAsBox(10*density/RATE, 10*density/RATE);//这里我们暂且将小鸟定义为4边型,正规的应该定义为多边形..涉及到计算.就带过了
BodyDef bodyDef = new BodyDef();
bodyDef.position.set(x / RATE, y / RATE);
Body body = world.createBody(bodyDef);
body.m_type = Body.e_dynamicType;
body.createShape(shape);
body.setMassFromShapes();
body.setUserData(“FlyBall”+Bodynum);
Bodynum++;
Vec2 gravity = new Vec2(-(myView.singleshot.x – 75) * 30,-(myView.singleshot.y -260*density)*40);
//这里的这个向量是将要加给小鸟初始飞行的冲量,会根据弹弓拉扯后的坐标计算向上或向下冲力,第一个值为水平方向正值为向右
//第二个为垂直方向,正值为向下
body.wakeUp();//唤醒这个刚体
body.applyImpulse(gravity, body.getWorldCenter());//给这个小鸟一个力
/// 这段代码是尝试给刚体一个力
arrBody.add(body); //将这个小鸟加入到刚体链表当中
}

//ConstactListener是碰撞监听,我们为这个世界增加碰撞监听,当刚体发生碰撞时,会回调这个方法
ContactListener listener = new ContactListener() {
Body body1;
Body body2;

public void result(ContactResult point) {
// TODO Auto-generated method stub
// myView.hit();
}

public void remove(ContactPoint point) {
// TODO Auto-generated method stub
// myView.hit();
// Log.v(“Hit!!”, “Hit!!”);
}

public void persist(ContactPoint point) {
// TODO Auto-generated method stub
// myView.hit();
// Log.v(“Hit!!”, “Hit!!”);
}

public void add(ContactPoint point) {//这个方法是当物体碰撞发生时触发的,我们主要对这个方法进行处理
// TODO Auto-generated method stub
// myView.hit();
Log.v(“Hit!!”, “Hit!!”);
//Log.v(“Hit!!”, “Hit!!”);
body1 = point.shape1.m_body;
body2 = point.shape2.m_body;
Log.v(“HitBodyOne”, body1.m_userData.toString());
Log.v(“HitBodyTwo”, body2.m_userData.toString()); //这里简单的监听了一下碰撞,输出了碰撞物体的名称,具体要做什么操作,实现什么动画效果,可以自己添加
}
};

//这里我们监听Touch事件,来实现弹弓的拖动效果
OnTouchListener touchListener = new OnTouchListener() {
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO Auto-generated method stub
//
Log.v(“x”,arg1.getX()+””);
Log.v(“y”,arg1.getY()+””);
MyGraphicsView view = (MyGraphicsView)arg0;

//当拖动时,我们来处理拖动的坐标,让他不会超出我们预设的范围
if(arg1.getX() > 120*density)
view.singleshot.x = (int)(100*density);
else
view.singleshot.x = (int)arg1.getX();
if(arg1.getY() < 230*density)
view.singleshot.y = (int)(230*density);
else
view.singleshot.y = (int)arg1.getY();
view.invalidate();
//end

//监听触碰移开,创建并释放小鸟
if(arg1.getAction() == MotionEvent.ACTION_UP)
{
createball(view.singleshot.x,view.singleshot.y,10*density);//调用创建小鸟方法
view.singleshot.x = 0;
view.singleshot.y = 0;
view.invalidate();
}
return true;
}
};
}

package cn.sun;
/**
* Author Sun
*/
import java.util.ArrayList;

import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Body;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.view.SurfaceView;
import android.view.View;

public class MyGraphicsView extends View{
Canvas canvas;
public ArrayList<Body> arrBody;
public float density;
public Point singleshot; //用来记录弹弓被拖动到的位置
public Bitmap bmbox;
public Bitmap bmbird;
public MyGraphicsView(Context context) {

super(context);
singleshot = new Point();
}
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
this.canvas = canvas;

//创建小鸟的bitmap图像,并对图像进行压缩4倍操作,只有在第一次创建时new Bitmap图像一次
if(bmbird == null ){
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
opt.inSampleSize = 4;
bmbird = BitmapFactory.decodeResource(getResources(), R.drawable.xx,opt);
bmbird = Bitmap.createScaledBitmap(bmbird, (int)(20*density), (int)(20*density),true);//将图像大小设定为20dip
//end
}

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • SketchBook 2014 基础入门视频教程

    SketchBook 2014 基础入门视频教程

    2017-05-01 11:00

  • 学习慕课网canvas倒计时实例笔记

    学习慕课网canvas倒计时实例笔记

    2017-04-30 14:01

  • 从一个画板demo学习canvas

    从一个画板demo学习canvas

    2017-04-30 13:00

  • canvas游戏开发学习之四:应用图像

    canvas游戏开发学习之四:应用图像

    2017-04-29 16:00

网友点评