gpt4 book ai didi

java - 设置基于分辨率的长度的最佳时间是什么?

转载 作者:行者123 更新时间:2023-12-02 09:24:58 24 4
gpt4 key购买 nike

本题将使用Processing 3+代码语法。

假设我有课 Bullet在玩家 x 位置的设定高度处生成。

class Bullet
{
int x;
int y = player.y;
int w = SIZE_X / 150;
int h = SIZE_Y / 50;

Bullet()
{
x = player.x;
}

void display()
{
rect(x, y, w, h);
}
}

假设我正在使用这个 Bullet在我的太空入侵者游戏中生成子弹的类。在 SpaceInvaders.pde我将创建一个 Player代表我的船的类。这个Player player有一个player.xplayer.y成分。所以,当在SpaceInvaders.pde时我调用player.shoot()我将创建一个新的 BulletArrayList<Bullet> bulletList .

我想知道设置某些变量的最佳时间是什么,以确保我的计算机进行尽可能少的计算。

现在我可以想到三种设置方法:

就像上面的代码一样。

或者:

// In SpaceInvaders.pde:
int BulletYPos = player.y;
int bulletWidth = SIZE_X / somenumber;
int bulletHeight = SIZE_Y / somenumber;
// where SIZE_X / SIZE_Y represent the size of the sketch

// in Class Player:
class Player
{
// <snip ... >

void shoot()
{
new Bullet(x, BulletYPos, bulletWidth, bulletHeight);
}
}
`
// in class Bullet:
class Bullet
{
int x, y, w, h;

Bullet(int _x, int _y, int _w, int _h)
{
x = _x;
y = _y;
w = _w;
h = _h;
}

void display()
{
rect(x, y, w, h);
}
}

这肯定意味着SIZE_X / somenumber只会计算一次。但是,我也可以看到它的速度要慢得多,因为计算机赋值的周期增加了。

基本上我的问题可以归结为:

如果我说int y = player.yclass Bullet ,它是计算一次,还是每次创建新的 Bullet 类时计算?

我的理解是Bullet中的代码类的构造函数Bullet()每次运行新的 Bullet被实例化。但这是否意味着它无法确定我的 int y, w, h每次,而且只是在程序启动时一次吗?或者每次我创建 Bullet 的新实例时,它也会被 secret 调用吗?类?

最佳答案

在您发布的代码中,这些行仅运行一次:

int bulletWidth = SIZE_X / somenumber; 
int bulletHeight = SIZE_Y / somenumber;

每次创建 Bullet 类的新实例时,这些行都会运行:

Bullet(int _x, int _y, int _w, int _h)
{
x = _x;
y = _y;
w = _w;
h = _h;
}

每次创建 Bullet 类的新实例时,这些行也会运行:

class Bullet
{
int x;
int y = player.y;
int w = SIZE_X / 150;
int h = SIZE_Y / 50;

每次使用这些值时,不会重新计算它们。

请注意,您可以使用函数自行测试。尝试这样的事情:

int sketchX = getSketchX();

void setup() {
size(100, 100);

for(int i = 0; i < 10; i++) {
Bullet b = new Bullet();
}
}

int getSketchX() {
println("getSketchX");
return 42;
}

class Bullet {
int classX = getClassX();

public Bullet() {
int constructorX = getConstructorX();
}

int getClassX() {
println("getClassX");
return 42;
}

int getConstructorX(){
println("getConstructorX");
return 42;
}
}

退后一步,我想说您可能过于担心性能。如果您还没有进行任何基准测试,那么您不应该竭尽全力确保您的计算机执行尽可能少的计算。对每颗子弹进行一些基本的数学计算不会造成任何问题。 (将其与您的计算机绘制屏幕所需的时间进行比较,您就会明白我的意思。)

有一句名言:"Premature optimization is the root of all evil."这意味着,如果您还没有测量代码,则不必太担心优化代码。

如果您测量代码并发现 Bullet 构造函数确实花费了太长的时间,那么您可以继续担心它。但您会发现您的程序绘制图形所花费的时间比除两个数字所花费的时间要多得多。

回答您的问题:设置基于分辨率的长度的最佳时间是可读性最强的地方

最易读的位置取决于代码的不同部分如何在您的大脑中组合在一起。与编码中的许多事情一样,这是一种权衡:如果您有很多不会更改的常量,则将初始化放在草图的顶部可能是有意义的,但将初始化放在 Bullet 构造函数中如果您将来可以更改每个项目符号的大小,可能会更具可读性。没有一个“最佳”位置可以放置您的代码。

关于java - 设置基于分辨率的长度的最佳时间是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com