Slick2d,我怎么能在屏幕上画一个字符串几秒钟?

时间:2013-06-26 16:46:51

标签: java slick2d

我一直试图解决这个问题,我想做的就是能够绘制一个字符串的时间超过一帧,但是当我在方法中调用它时我希望它闪烁然后立即消失,任何建议将不胜感激:)我正在使用这样的东西:

g.drawString("You got a Key!", 100, 100);

我在一个方法中执行此操作,该方法在拾取项目后调用

public void addItemFound(Graphics g){
    ip.mainInventory[ip.getFirstEmptyStack()] = getItemStackFound();
    System.out.println(this.getItemFound() + " added");
    g.drawString("You Got a Key!", 100, 100);
}

如果您感兴趣,那就是完整的方法:)谢谢!也为这个愚蠢的问题道歉,我是这个新手:P

2 个答案:

答案 0 :(得分:0)

我相信做这个项目的最好方法是定期画画,例如使用Thread.sleep() 10毫秒。这样,您可以简单地添加一个变量来显示消息,例如100个循环(1秒),如下所示:

private LinkedList<String> drawStringList= new LinkedList<>();
private LinkedList<Integer> drawStringTimeout= new LinkedList<>();
private LinkedList<Integer[]> drawStringPos= new LinkedList<>();


public void addText(String stringToWrite, int posX, int posY, int timeOut) {
    drawStringList.add(stringToWrite);
    int[] pos = new int[2];
    pos[0] = posX;
    pos[1] = posY;
    drawStringPos.add(pos);
    drawStringTimeout.add(timeOut);
}

private void mainLoop() {
...items to be drawn here...
for(int i=0;i<drawStringList.size();i++){
    g.drawString(drawStringList.get(i),drawStringPos.get(i)[0],drawStringPos.get(i)[1]);
    drawStringTimeout.set(i,drawStringTimeout.get(i)-1);
    if(drawStringTimeout.get(i)<=0) {
        drawStringList.remove(i);
        drawStringTimeout.remove(i);
        drawStringPos.remove(i);
    }
}
try { Thread.sleep(10); } catch (Exception e) {}
}

在此代码中,您必须将要绘制的字符串添加到drawStringList,将要保留的字符串数添加到drawStringTimeout并添加要绘制的位置以drawStringPos作为数组(如果你愿意,你可以使用一个点)。我已经做了一个方法来做到这一点。

答案 1 :(得分:0)

我不知道Dan300试图告诉你做什么,但这样,方式,方式过于复杂。 Slick2D适用于游戏状态:

http://slick.ninjacave.com/javadoc/org/newdawn/slick/state/GameState.html

游戏状态有一个名为render()的方法。在循环的每个循环中调用render()以使用绘图信息更新屏幕。如果要在屏幕上绘制文本较长时间,则应在此render()函数的堆栈空间内的某处绘制文本。

现在发生的事情是你有一个具有一个特定目的的功能,只是每隔一段时间才会存在:向玩家添加一个项目。游戏遇到了这个声明,当在该1个周期内添加项目时,将绘制文本。但是下一个周期,当玩家没有拿起一个项目时,它不会来自该drawString语句,并且你的屏幕上的字符串不会超过1个游戏周期。