libGDX-4:封装完善的纹理 Sprite

前言

上节我们学会了响应用户输入,并实现了一个小火箭飞行的小游戏,但是我们发现,com.badlogic.gdx.graphics.Texture 只封装了一张图片,并不包含一张纹理的其它属性,为实现完整的游戏对象,我们通常使用封装较为完善的com.badlogic.gdx.graphics.g2d.Sprite类。

Sprite 精灵

相比 Texture , Sprite 能够更好的实现一个游戏对象,它继承了com.badlogic.gdx.graphics.g2d.TextureRegion类,并且扩展了许多纹理相关的属性,它的常用构造方法如下:

  • Sprite(Texture texture) : 使用 texture 创建 Sprite
  • Sprite(TextureRegion region) : 使用 region 创建 Sprite
  • Sprite(Texture texture,int srcWidth,int srcHeight) : 从(0,0)开始截取 texture srcWidth*srcHeight 的大小来创建 Sprite
  • Sprite(Texture texture,int srcX,int srcY,int srcWidth,int srcHeight) : 从(srcX,srcY)开始截取 texture srcWidth*srcHeight 的大小来创建 Sprite
  • Sprite(TextureRegion region,int srcX,int srcY,int srcWidth,int srcHeight) : 从(srcX,srcY)开始截取 region srcWidth*srcHeight 的大小来创建 Sprite

Sprite de 使用

前面讲过, Sprite 包含了许多纹理相关的属性,是的,它通过以下方法改变纹理属性(常用):

//设置 sprite 坐标
sprite.setX(x);
sprite.setY(y);
sprite.setPosition(x,y);
//设置 sprite 大小
sprite.setWidth(width);
sprite.setHeight(height);
sprite.setSize(width,height);
//同时设置 sprite 的位置和大小
sprite.setBounds(x,y,width,height);
//设置 sprite 大小缩放倍数
sprite.setScale(scaleXY);
sprite.setScale(scaleX,scaleY);
//设置 sprite 旋转角度,单位度,逆时针方向为正
sprite.setRotation(dagrees);
//设置 sprite 旋转,缩放的中心点,默认是纹理中心
sprite.setOrigin(originX,originY);
//设置 sprite 是否翻转
sprite.setFlip(isFlipX,isFirpY);
//设置 sprite 的纹理
sprite.setTexture(texture);
sprite.setRegion(region);

当然,你也可以获取 Sprite 的各项属性:

sprite.getX();
sprite.getY();
sprite.getWidth();
spritecaleY();
sprite.getTetxure.getHeight();
sprite.getBoundingRectangle();	//获取矩形(com.badloc.gdx.maths.Rectangle)
sprite.getScaleX();
sprite.getS();

Sprite de 绘制

由于 Sprite 自身包含了许多属性,因此,绘制只需将 SpriteBatch 传入 Sprite 的 draw()方法即可:

soeite.draw(spriteBatch);

尝试

接下来,我们将使用 Sprite 类对上节的小火箭程序进行修改:

package com.libGDX.test;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Test extends ApplicationAdapter {
	private SpriteBatch batch;
	private Texture hjTexture;
	private Sprite hj;
	@Override
	public void create() {
		batch=new SpriteBatch();
		hjTexture=new Texture(Gdx.files.internal("hj.png"));
		hj=new Sprite(hjTexture);
		Gdx.input.setInputProcessor(new InputAdapter() {
			@Override
			public boolean keyTyped(char character) {
				if(character=='w') {
					//递增y和旋转角度
					hj.setY(hj.getY()+1000*Gdx.graphics.getDeltaTime());
					hj.setRotation(hj.getRotation()+10);
				}
				return false;
			}
			
		});
	}
	@Override
	public void render() {
		Gdx.gl.glClearColor(1, 1, 1, 1);
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
		batch.begin();
		//直接传入 batch
		hj.draw(batch);
		batch.end();
	}
	
	@Override
	public void dispose() {
		//由于 hj 引用了 hjTexture,因此只需释放 hjTexture ,但 hj将无法继续使用
		hjTexture.dispose();
		batch.dispose();
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值