如何阻止我的文本数组在Java中闪烁和切换?

时间:2014-08-28 13:14:16

标签: java arrays awt

我的文本数组有问题,文本不断切换。这是我到目前为止的代码:

private void drawSplash(Graphics2D g) {
  if (displayed == false) {
     Random r = new Random();
     String list;
     String items[] = { "Buggy!", "New Game!", "Roll up, roll up!",
           "Made from Scratch" };
     int amount;
     amount = (int) (Math.random() * 25 + 1);
     list = items[r.nextInt(3 + 1)];
     System.out.println(list);
     g.setFont(font2);
     g.setColor(Color.BLACK);
     g.drawString(list, 320, 240);
     displayed = true;
  }
}

我想这样做,以便每当程序重新启动时,字符串都会改变。

有人可以帮我吗?这真让我烦恼。

4 个答案:

答案 0 :(得分:1)

问题是你想在程序启动之间保持状态,否则你会得到重复。所以你想要做的是:

在启动期间:如果不存在具有混洗列表的属性文件,则创建一个混洗列表,将索引设置为1

然后:

  1. 启动期间:从属性文件
  2. 检索混洗列表和索引
  3. 将具有指定索引的项目放在static字段
  4. 再次增加索引并存储属性文件
  5. 在绘画期间显示项目
  6. 我会在你用完物品时把它留给你。


    对于快速修复,只需在每次使用该类时显示一个随机项:

    private static String ITEMS[] = { "Buggy!", "New Game!",
            "Roll up, roll up!", "Made from Scratch" };
    
    private String itemDisplayed = chooseItem();
    
    private String chooseItem() {
        Random r = new SecureRandom();
        int i = r.nextInt(ITEMS.length);
        return ITEMS[i];
    }
    
    private void drawSplash(Graphics2D g) {
        g.setColor(Color.BLACK);
        g.setFont(font2);
        g.drawString(itemDisplayed, 320, 240);
        displayed = true;
    }
    

答案 1 :(得分:0)

这是错误的:

list = items[r.nextInt(3+1)]

每次执行drawSplash()方法时,list都会有一个新的随机值。

你应该只启动一次:

String list;
Random r = new Random();

public void initListIndex(){
     String items[] = { "Buggy!", "New Game!", "Roll up, roll up!",
           "Made from Scratch" };

     int listIndex = r.nextInt(3 + 1);
     list= items[listIndex];
}

private void drawSplash(Graphics2D g) {
  if (displayed == false) {
     System.out.println(list);
     g.setFont(font2);
     g.setColor(Color.BLACK);
     g.drawString(list, 320, 240);
     displayed = true;
  }
}

答案 2 :(得分:0)

我猜每次文本更改时都会调用drawSplash。如果您只想绘制一个随机字符串,例如初始化为

创建一个自己的函数
list = items[r.nextInt(3+1)];

仅被调用一次

答案 3 :(得分:0)

问题不是drawSplash(),而是a)调用它的频率,b)即使经常调用它,也有人必须将displayed的值更改为false方法之外。 只是一些小的评论:

if (!displayed)是通常的风格

从不使用

amount

Random r并非真正需要