首页 > 解决方案 > 在不同函数中调用时变量无法正常工作

问题描述

我正在使用 java 制作一个可爱的动画猪的代码:

import java.io.File;

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public static void main(String[] args) {
  
  File Oink = new File("C:/.../oink.wav");
  //sound definition -- you can specify your file location in '...' 
  //if you would like to test my code :)
  
}

static void PlaySound(File Sound) {
  
  try {
    Clip clip = AudioSystem.getClip();
    clip.open(AudioSystem.getAudioInputStream(Sound));
    clip.start();
    
    Thread.sleep(clip.getMicrosecondLength()/1000);
    
  }catch (Exception e) {
    System.out.println(e);
  }
  
}

int pigX ;
int pigY ;
int count ;
int snoutPos ;
int eyeCol ;
int legY ;
int earS ;


void setup () {
  ;
  System.out.println("Pig assemled!");
  System.out.println("Pig free to roam!");
  System.out.println(Math.random());
  size (900, 900);
  pigX = width/2;
  pigY = height/2;
  count = -1;
  count = -1;
}

void draw () {

  if (keyPressed) {

    if (key == CODED) {

      if (keyCode==RIGHT) {
        pigX += 10;
      }

      if (keyCode==LEFT) {
        pigX -= 10;
      }

      if (keyCode==UP) {
        pigY -= 10;
      }

      if (keyCode==DOWN) {
        pigY += 10;
      }

      if (key==' ') {
        PlaySound(Oink);           // Oink is apparently not defined here
        
      }
    }
  }

  if (pigX < -180) {
    pigX = 1080;
  }

  if (pigX > 1080) {
    pigX = -180;
  }

  if (pigY < -180) {
    pigY = 1080;
  }

  if (pigY > 1080) {
    pigY = -170;
  }


  background (50, 130, 50);

  count += 1;


  if ((count % 36) == 0) { 
    snoutPos += 1;
  }

  if (0 < (count % 90) && (count % 90) < 10) {
    eyeCol = 0;
  } else {
    eyeCol = 255;
  }

  if (0 < (count % 40) && (count % 40) < 20) {
    legY = 20;
  } else {
    legY = 0;
  }

  if (count % 60 < 30) {
    earS = 10;
  } else {
    earS = 7;
  }



  //shadow
  fill (45, 95, 45);
  stroke (45, 95, 45);
  rect (pigX, pigY+160, 200, 100);
  rect (pigX+109, pigY+160, 20, 80);
  rect (pigX-109, pigY+160, 20, 80);

  //body
  fill (239, 154, 154);
  stroke (0, 0, 0);
  rectMode (CENTER);
  rect (pigX, pigY, 180, 180);

  //eyes
  fill (0, 0, 0);
  rect (pigX-70, pigY, 40, 20);
  rect (pigX+70, pigY, 40, 20);
  stroke (eyeCol, eyeCol, eyeCol);
  fill (eyeCol, eyeCol, eyeCol); 
  rect (pigX-60, pigY, 20, 20);
  rect (pigX+60, pigY, 20, 20);

  //snout
  fill (255, 205, 210);
  stroke (255, 205, 210);
  rect (pigX, pigY+40-(snoutPos % 2)*9, 80, 50); 
  fill (229, 115, 115);
  stroke (229, 115, 115);
  rect (pigX-30, pigY+40-(snoutPos % 2)*9, 20, 20);
  rect (pigX+30, pigY+40-(snoutPos % 2)*9, 20, 20);

  //hair i guess
  rect (pigX-40, pigY-69, 20, 40);

  //legs
  fill (190, 100, 100);
  stroke (100, 65, 65);
  rect (pigX-45, pigY+120+legY/2, 60, 60+legY);

  fill (190, 100, 100);
  stroke (100, 65, 65);
  rect (pigX+45, pigY+130-legY/2, 60, 80-legY);

  //hooves
  fill (140, 50, 50);
  stroke (140, 50, 50);
  rect (pigX-65, pigY+140+legY, 20, 20);
  rect (pigX-25, pigY+140+legY, 20, 20);

  rect (pigX+65, pigY+160-legY, 20, 20);
  rect (pigX+25, pigY+160-legY, 20, 20);

  //ears
  fill (219, 134, 134);
  stroke (219, 134, 134);

  rect (pigX-85, pigY-95, 50, 15);
  rect (pigX-100, pigY-70, 20, 40);

  rect (pigX+85, pigY-95, 50, 15);
  rect (pigX+100, pigY-70, 20, 40);
}

但是,程序说没有定义“Oink”!

我想也许我应该做一些像Oink全球化这样的事情,但我不能只坚持global Filemain() !

我在互联网上浏览了解决方案,但没有一个结果真正回答了我的问题!
我想我可以在draw ().那。

我该如何解决这个问题?

注意:即使我放入File Oink = new File("C:/.../oink.wav");draw()声音仍然不起作用!

标签: javavariablesaudiowav

解决方案


推荐阅读