Box2D例子——Demo1掉落的小球

<pre name="code" class="java">package com.cvte.game;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.EdgeShape;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import com.badlogic.gdx.physics.box2d.World;

public class Demo1 extends ApplicationAdapter {

    private static final float PXTM = 80;

	protected OrthographicCamera mCamera;
	private Box2DDebugRenderer mRenderer;

	private World mWorld;
	private Body mBall;

	private Texture mTextureBall;
	private SpriteBatch mBatch;

	private float mBallRadius;

	@Override
	public void create() {
        float cameraWidth = Gdx.graphics.getWidth() / PXTM;
        float cameraHeight = Gdx.graphics.getHeight() / PXTM;
		mCamera = new OrthographicCamera(cameraWidth, cameraHeight);
		mCamera.position.set(cameraWidth / 2, cameraHeight / 2, 0);
		mCamera.update();

		mRenderer = new Box2DDebugRenderer();

		mWorld = new World(new Vector2(0, -10), true);

		//ground
		{
			BodyDef bd = new BodyDef();
			bd.type = BodyType.StaticBody;
			bd.position.set(toWorldSize(0), toWorldSize(100));

			EdgeShape edgeShape = new EdgeShape();
			edgeShape.set(new Vector2(toWorldSize(0), toWorldSize(80)), new Vector2(toWorldSize(Gdx.graphics.getWidth()), toWorldSize(80)));

			FixtureDef fd = new FixtureDef();
			fd.shape = edgeShape;

			Body ground = mWorld.createBody(bd);
			ground.createFixture(fd);
		}

		//ball
		{
			BodyDef bd = new BodyDef();
			bd.type = BodyType.DynamicBody;
			bd.position.set(toWorldSize(400), toWorldSize(800));

			mBallRadius = toWorldSize(20);
			CircleShape circleShape = new CircleShape();
			circleShape.setRadius(mBallRadius);

			FixtureDef fd = new FixtureDef();
			fd.shape = circleShape;
			fd.density = 1;
			fd.restitution = 0.9f;

			mBall = mWorld.createBody(bd);
			mBall.createFixture(fd);

			mTextureBall = new Texture(Gdx.files.internal("coin1.png"));
			mBall.setUserData(mTextureBall);
		}

		mBatch = new SpriteBatch();
	}

	@Override
	public void dispose() {
		mRenderer.dispose();
		mWorld.dispose();

		mCamera = null;
	}

	@Override
	public void render() {
		Gdx.gl.glClearColor(1, 1, 1, 1);
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

		mWorld.step(Gdx.app.getGraphics().getDeltaTime(), 6, 2);

//		mRenderer.render(mWorld, mCamera.combined);

		mBatch.setProjectionMatrix(mCamera.combined);
		mBatch.begin();
		mBatch.draw(mTextureBall, mBall.getPosition().x - mBallRadius, mBall.getPosition().y - mBallRadius, mBallRadius * 2, mBallRadius * 2);
		mBatch.end();
	}

	private float toWorldSize(float pos) {
		return (pos / PXTM);
	}

}

				
时间: 2024-12-13 22:30:47

Box2D例子——Demo1掉落的小球的相关文章

Box2D例子——Demo0掉落的小球

package com.cvte.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.

Box2D例子——Demo2停不下来的球球

package com.cvte.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gd

Box2D例子——Demo3自行车

package com.cvte.game; import com.badlogic.gdx.ApplicationAdapter; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Orthog

时钟特效程序

做了个特效小程序,在过程中发现自己在学过的知识中有掌握的不够牢固的,今天在这里复习一下: 一.三目运算符中能否使用{}吗? 不可以,三目运算符的语法:条件 ? 结果1 : 结果2; 结果不可以用语句代替 二.canvas可以嵌套吗? 不可以, 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title><

【每日算法】链表 &amp; 例题选讲

单链表 链表是常用的数据结构,其优点是插入和删除元素时不需要移动,表的容量可扩充,且存储空间可以不连续. 另外,由于涉及到指针,所以很受面试官的青睐. 本文将主要介绍单链表,并简单介绍下双链表和环形链表,并通过一系列的题目来强化这方面的知识. 链表节点的结构: template<class DataType> struct Node { DataType data; Node<DataType> *next; }; data存放节点的数据,next指向下一个节点. 对于单链表,需要

转载css的background-position

这是一个有趣的话题 其实我并不确切的平时大家是怎么去应用或者玩转一个属性,一个值.我能肯定的是这些东西都有不少的可玩性. 我今天要聊的 background-position 应该已经被大家玩得色彩斑斓了.尤其是 CSS Sprites流行的这些年,background-position 基本上是被应用最多的属性之一. 重拾旧趣 我们知道 background-position 是用来指定背景图像的偏移值的,能让一张图从特定的位置开始展现.而 CSS Sprites 就是通过将多个小图拼接成一张

JS变量对象详解

JS变量对象详解 开年之后工作热情一直不是很高,这几天一直处于消极怠工状态.早上不想起床,起床了不想上班.明明放假之前工作热情还一直很高,一直心心念念的想把小程序项目怼出来,结果休假回来之后画风完全不一样了.我感觉自己得了严重了节后综合征.还好撸了几篇文章,勉强表示这一周的时间没有完全浪费.这篇文章要给大家介绍的是变量对象. 在JavaScript中,我们肯定不可避免的需要声明变量和函数,可是JS解析器是如何找到这些变量的呢?我们还得对执行上下文有一个进一步的了解. 在上一篇文章中,我们已经知道

day15 分页及 JDBC 大数据的处理

day15 分页及 JDBC 大数据的处理 1. 分页实现(重点) 1.1 自建 EL 表达式去处理简介过长问题 2. 完成客户关系管理案例 3. jdbc 大数据的处理 4. jdbc 实现数据库批处理 5. jdbc 获取数据库自动生成的主键和调用存储过程 5.1 数据库自动生成的主键 5.2 jdbc 调用存储过程(procedure) - 金融证券领域用的特多 6. ResultSet 对结果集进行滚动 Author:相忠良 Email: [email protected] 起始于:Ju

WPF---数据绑定之ValidationRule数据校验(六)

一.概述 我们知道,Binding好比架设在Source和Target之间的桥梁,数据可以借助这个桥梁进行流通.在数据流通的过程中,我们可以在Binding这座桥梁上设置关卡,对数据的有效性进行验证. 二.验证方法 我们利用Binding的ValidationRules(类型为Collection<ValidationRule)对数据进行验证.从它的名称和类型可以得知,我们可以为每个Binding设置多个数据校验条件,每个条件是一个 ValidationRule对象,ValidationRule