0

我一直在试图弄清楚这一点,我想要做的就是能够绘制一个比一帧更长的字符串,但是当我在我希望它闪现然后立即消失的方法中调用它时,任何建议都会不胜感激:)我正在使用这样的东西:

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

4

2 回答 2

0

我相信完成这个项目的最好方法是定期绘制场景,例如 10 毫秒使用Thread.sleep(). 这样,您可以简单地添加一个变量来显示消息,例如 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为数组(如果您可以使用点想要)。我已经做了一个方法来做到这一点。

于 2013-06-26T17:07:24.863 回答
0

我不知道 Dan​​300 试图告诉你做什么,但这太复杂了Slick2D 适用于游戏状态:

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

游戏状态有一个叫做 render() 的方法。循环的每个循环都会调用 render() 以使用绘图信息更新屏幕。如果你想在屏幕上绘制更长时间的文本,你应该在这个 render() 函数的堆栈空间内的某个地方绘制文本。

现在发生的事情是你有一个特定目的的功能,它只是短暂存在:向播放器添加一个项目。游戏遇到此语句,并且在该 1 个周期内添加项目时,将绘制文本。但是下一个循环,当玩家没有捡起一个物品时,它不会出现那个 drawString 语句,并且你的屏幕上的字符串不会超过 1 个游戏循环。

于 2013-07-12T07:14:02.623 回答