如何以固定的时间间隔创建激光对象的副本?激光是来自激光束的轨迹。我希望来自激光束的轨迹不是单个激光对象,而是经典游戏蛇的set.Like?
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.scenes.scene2d.Stage;
public class Laser extends BaseActor {
Lasermid lasermid;
Color color=new Color(Color.GREEN);
public Laser(float x, float y, Stage s) {
super(x, y, s);
loadTexture("assets/Line11.png");
setSize(30,10);
setMaxSpeed(800);
setBoundaryPolygon(8);
setSpeed(10);
lasermid = new Lasermid(-30, 0, s);
addActor(lasermid);
lasermid.setColor(color);
// lasermid.setPosition(getX(),getY());
}
public void act(float dt) {
super.act(dt);
applyPhysics(dt);
}
}
类Lasermid
public class Lasermid extends BaseActor{
public Vector2 position = new Vector2();
public Lasermid(float x, float y, Stage s) {
super(x, y, s);
loadTexture("assets/Line111.png");
setSize(30, 10);
setBoundaryPolygon(8);
}
public void act(float dt) {
super.act(dt);
applyPhysics(dt);
}
}
发布于 2020-05-05 00:14:41
您的类不应该在构造函数中使用Stage。如果你真的使用它做任何事情,它会产生双向耦合和脆弱的代码。
你绝对不应该从Actor内部加载纹理,特别是其他Actor使用的纹理。纹理是在从一个切换到另一个时占用大量内存和CPU的资源。当每个执行元加载其自己的纹理副本时,您将在绘制过程中浪费内存、加载时间和CPU周期。如果不处理它们,也会泄漏大量内存。您应该为整个游戏加载纹理的单个副本,并将对纹理的引用传递给Actor的构造函数。
没有复制对象的快捷方式。必须创建静态方法或构造函数,以便手动将每个属性的值复制到新实例中。如果相关,还必须复制内部引用的类。
因此,激光的复制方法如下所示,但您需要复制它使用的每个相关参数:
public Laser copy() {
final Laser laser = new Laser(getX(), getY());
laser.setRotation(getRotation());
laser.setSpeed(getSpeed());
laser.setColor(getColor());
laser.laserMid.setRotation(laserMid.getRotation);
// etc.
return laser;
}
如果使用do this with constructors,您可以利用层次结构来简化复制子类的工作。例如:
// BaseActor constructor:
public BaseActor(BaseActor other) {
super();
setX(other.getX());
setY(other.getY());
setColor(other.getColor());
// etc.
}
// Laser constructors:
public Laser(float x, float y) {
super();
init();
}
public Laser(Laser other) {
super(other);
init()
laser.laserMid.setRotation(laserMid.getRotation);
// etc.
}
private void init() {
setSize(30,10);
setMaxSpeed(800);
setBoundaryPolygon(8);
setSpeed(10);
// etc.
}
顺便说一句,您的color
字段正在遮蔽Actor已有的颜色字段。
发布于 2020-05-04 22:25:51
https://stackoverflow.com/questions/61593310
复制相似问题