我希望在精灵单元上创建一种战争迷雾风格的效果,并被告知 scissorstack 可以完成这项工作,但我无法弄清楚我做错了什么......
我设置了典型的 libgdx。我为每个游戏角色开设了一门课。我想通过配置每个班级来控制每个单元的“距离”。所以说我想要拥有战争迷雾 5 的 MainPlayer,但是一个 Pawn 单位在该单位所在的图块周围有 1 个空间的战争迷雾。
我已经加载了精灵,tmx 地图和碰撞检测工作正常。现在我只是不知道应该将 scissorstack 代码放在 Player 类中的哪个位置/如何让它工作。我还想知道雾周围可见瓷砖的坐标...
public class Player extends Sprite implements InputProcessor{
private Vector2 velocity = new Vector2();
public Player(Sprite sprite, TiledMapTileLayer collision layer){
super(sprite);
this.collisionLayer=collisionLayer;
}
public void draw(SpriteBatch spriteBatch){
update(Gdx.graphics.getDeltaTime());
super.draw(spriteBatch);
}
public Vector2 getVelocity() {
return velocity;
}
public void setVelocity(Vector2 velocity) {
this.velocity = velocity;
}
public float getSpeed() {
return speed;
}
public void setSpeed(float speed) {
this.speed = speed;
}
public float getGravity() {
return gravity;
}
public void setGravity(float gravity) {
this.gravity = gravity;
}
public TiledMapTileLayer getCollisionLayer() {
return collisionLayer;
}
public void setCollisionLayer(TiledMapTileLayer collisionLayer) {
this.collisionLayer = collisionLayer;
}
public boolean keyDown(int keycode){
switch(keycode){
case Keys.W:
setY(getY()+1*50);//velocity.x=speed;
break;
case Keys.A:
setX(getX()-1*50);//velocity.x=-speed;
break;
case Keys.D:
setX(getX()+1*50);//velocity.x=speed;
break;
case Keys.S:
setY(getY()-1*50);//velocity.y=-speed;
break;
}
System.out.println(getX()/50+", "+getY()/50);
return true;
}
public boolean keyUp(int keycode){
switch(keycode){
case Keys.W:
velocity.y=0;
break;
case Keys.A:
velocity.x=0;
break;
case Keys.D:
velocity.x=0;
break;
case Keys.S:
velocity.y=0;
break;
}return true;
}
@Override
public boolean keyTyped(char character) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean scrolled(int amount) {
// TODO Auto-generated method stub
return false;
}
}
}
我尝试了以下操作:让一个组将演员隐藏在其范围之外
这是我在 Player 类的 draw 方法中尝试的:
public void draw(SpriteBatch spriteBatch){
update(Gdx.graphics.getDeltaTime());
Rectangle scissors = new Rectangle();
Rectangle clipBounds = new Rectangle(getX(),getY(),4*width,4*height);
ScissorStack.calculateScissors(camera, spriteBatch.getTransformMatrix(), clipBounds, scissors);
ScissorStack.pushScissors(scissors);
spriteBatch.draw(...);
spriteBatch.flush();
ScissorStack.popScissors();
super.draw(spriteBatch);
}
我很困惑。在播放器实体类中使用 scissorstack 的示例会很有帮助。谢谢