私はスプライト ユニットの周りに霧のようなスタイルの効果を作成しようとしています。
私は典型的な libgdx をセットアップしました。ゲームキャラクターごとにクラスがあります。各クラスを構成することで、各ユニットが「どれだけ離れているか」を制御したいと思います。ですから、MainPlayer に 5 の戦争の霧が欲しいとしますが、ポーン ユニットには、ユニットが配置されているタイルの周りに 1 スペースの戦争の霧を持たせます。
スプライトが読み込まれ、tmx マップと衝突検出が正常に機能しています。今、シザースタックコードを 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);
}
私は混乱しています。プレーヤー エンティティ クラス内でのはさみスタックの使用例が役立ちます。ありがとう