Libgdx学习笔记:UI之评分组件

Libgdx学习笔记:UI之评分组件_第1张图片


评分组件。


使用方法:

// 星星上限,亮图,背景图
CHRatingBar chRatingBar = new CHRatingBar(5, CHRes.asset.starsp_png, CHRes.asset.starspgray_png);
addActor(chRatingBar);
// 星星进度
chRatingBar.setRating(1.5f);

代码展示;

package com.oahcfly.chgame.core.ui;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.oahcfly.chgame.core.Chao;
import com.oahcfly.chgame.core.map.CHTiledActor;

/**
 * 
 * 用星型来显示等级评定
 * @author haocao
 *
 */
public class CHRatingBar extends Actor {

	private float numStars;
	private float rating;
	private CHTiledActor bgTiledActor;
	private Texture lightTexture, bgTexture;

	/**
	 * 
	 * @param max 最大数量
	 * @param lightPngPath
	 * @param bgPngPath
	 */
	public CHRatingBar (float max, String lightPngPath, String bgPngPath) {
		this.lightTexture = Chao.game.getTexture(lightPngPath);
		this.bgTexture = Chao.game.getTexture(bgPngPath);
		setNumStars(max);
	}

	public void setNumStars (float numStars) {
		this.numStars = numStars;
		bgTiledActor = new CHTiledActor(this.bgTexture, bgTexture.getWidth() * numStars, bgTexture.getHeight());
		setSize(bgTexture.getWidth() * numStars, bgTexture.getHeight());
	}

	@Override
	public void draw (Batch batch, float parentAlpha) {
		Color color = getColor();
		batch.setColor(color.r, color.g, color.b, color.a);

		bgTiledActor.setPosition(getX(), getY());
		bgTiledActor.draw(batch, parentAlpha);
		float tmpx = getX();
		float tmpy = getY();
		// 进度
		if (rating > 0) {
			// 有几个完整star
			int fullx = (int)rating;
			for (int i = 0; i < fullx; i++) {
				batch.draw(lightTexture, tmpx, tmpy);
				tmpx += lightTexture.getWidth();
			}
			float remainX = rating - fullx;
			if (remainX > 0) {
				float remainW = remainX * lightTexture.getWidth();
				float u = 0, v = 1;
				float u2 = remainX, v2 = 0;
				batch.draw(lightTexture, getX() + fullx * lightTexture.getWidth(), getY(), remainW, lightTexture.getHeight(), u, v,
					u2, v2);
			}
		}
	}

	public float getMax () {
		return numStars;
	}

	public float getRating () {
		return rating;
	}

	public void setRating (float rating) {
		if (rating > numStars) rating = numStars;
		this.rating = rating;

	}

}



基于Libgdx开发的开源游戏框架CHGame:

http://git.oschina.net/oahcfly/CHGameFrame


你可能感兴趣的:(libgdx评分组件,CHRatingBar)