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