小编T_0*_*_01的帖子

Java两种方法中的varargs

在java中有没有办法创建一个方法,期待两种不同的变量?我知道,由于编译器不知道从哪里开始或结束,因此使用相同的对象类型是不可能的.但为什么它也不可能与不同的对象类型?

例如:

public void doSomething(String... s, int... i){
    //...
    //...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法创建这样的方法?谢谢!

java arrays variadic-functions

30
推荐指数
4
解决办法
2万
查看次数

ArrayList remove vs removeAll

如果我想从arraylist中删除一个集合,最好使用什么?我认为ArrayList中的removeAll方法是为这个任务编写的,但是在我写的一个测试中,只是迭代遍历对象并删除它们个人的速度要快几秒.

你为此目的使用了什么?

编辑:

我在grepcode上找到的removeAll代码调用batchRemove(c,false):

private boolean更多... batchRemove(Collection c,boolean complement){

700         final Object[] elementData = this.elementData;
701         int r = 0, w = 0;
702         boolean modified = false;
703         try {
704             for (; r < size; r++)
705                 if (c.contains(elementData[r]) == complement)
706                     elementData[w++] = elementData[r];
707         } finally {
708             // Preserve behavioral compatibility with AbstractCollection,
709             // even if c.contains() throws.
710             if (r != size) {
711                 System.arraycopy(elementData, r,
712                                  elementData, w,
713                                  size - r); …
Run Code Online (Sandbox Code Playgroud)

java collections performance arraylist removeall

6
推荐指数
1
解决办法
3043
查看次数

GLSL着色器:在两个以上纹理之间插值

我在OpenGL中实现了一个高度图.现在它只是一个正弦/余弦弯曲的地形.此刻,我在白色"冰"和深色"石头"纹理之间进行插值.这样做是这样的:

color = mix(texture2D(ice_layer_tex, texcoord), texture2D(stone_layer_tex, texcoord), (vertex.y + amplitude) / (amplitude * 2))
Run Code Online (Sandbox Code Playgroud)

结果:

从顶部

从底部

它工作正常,但如果我想添加更多纹理(例如草纹理),插值顺序为"冰,石头,草",我该怎么办?我想,有没有这样的功能mix(sampler2D[], percentages[])?我怎么能按照这个逻辑写一个GLSL方法?

java opengl interpolation lwjgl heightmap

4
推荐指数
1
解决办法
9713
查看次数

让敌人以相同的速度走一条路

我开始用java编写游戏.我有Enemys和一个玩家,一个基本的2D游戏,这是第一次获得经验.

现在我想让Enemys走一条路,我可以把它画进一个"关卡编辑器".我有一个JPanel,一个mouseMoveListener,然后单击Path2D开始将mouseMove点保存到Path2D.Double对象.

之后,我实现了以下方法来使enemys遵循这条路径:

public void forward(){
    if(!pathIterator.isDone()){
        pathIterator.currentSegment(current);
        x = current[0];
        y = current[1];
        pathIterator.next();
    }
    else {
        dead = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它清楚现在发生了什么:敌人跟随,但速度是我移动鼠标.因此,如果我快速移动鼠标,敌人只会......从一个点"跳跃"到另一个点.慢下来,它"偷偷摸摸"了这一点.(因为我不是机器人,我不能以相同的速度移动鼠标^^)

谈论机器人:是的,我可以让一个awt.Robot移动我的鼠标.但这也不可能,因为我必须绘制复杂的路径,这些路径没有任何可见的数学背后.

所以,我想让这个Enemys以相同的速度在这条路上前进.我的问题:我不知道在哪里实施"修复".我有2个想法:

  • 也许我可以在路径创建上工作:不仅可以将点添加到Path2D,也许我可以计算我移动到快速的点之间的点,或者删除彼此靠近的点.但是:首先,我不知道如何计算这个,(有没有数学逻辑来实现这个?)第二,当我这样做时,我可能无法改变敌人游戏的速度,那会很糟糕的

  • 我的第二个想法是计算(跳过点之外的点)之间的点,这应该发生在每一帧,相对于实际速度.但是在这里我没有足够的数学经验.

那么,这种方式是否可能,如果是的话,有人知道如何计算这个吗?而且,如果没有,我有什么其他可能性来实现这一目标?

谢谢你,对不起英语不好意思!

java performance game-physics path-2d

2
推荐指数
1
解决办法
362
查看次数

Java将变量添加到超类中

我有一个普遍的问题:是否可以创建一个类,它是另一个类的原始副本,但包含其他变量?

例如,我知道这可以通过JPanel实现:

public class CustomPanel extends JPanel{
    int exampleVariable = 0;
}
Run Code Online (Sandbox Code Playgroud)

这是可能的,没有任何问题.但我也可以和其他课程一起做吗?在我的情况下,我想用Image- 但这似乎不可能,当我添加extends Image我必须实现所需的方法,这意味着我必须编写一个新的Image类.有可能以另一种方式吗?

编辑:我的目的是添加一个方法来设置图像名称...

java extends superclass

0
推荐指数
1
解决办法
208
查看次数