import ddf.minim.*;
AudioPlayer player;
Minim minim;
Table t1= new Table(300, 300);
float power=0;
float dx=0;
float dy=0;
void setup()
{
size(1000, 600);
frameRate(20);
minim= new Minim(this);
player=minim.loadFile("ballsound.mp3");
}
void draw()
{
strokeWeight(1);
stroke(0, 0, 0);
strokeWeight(10);
stroke(255, 0, 0);
fill(26, 218, 35);
rect(0, 0, 1000, 600);
noStroke();
fill(0);
ellipse(0, 0, 80, 80);
ellipse(1000, 0, 80, 80);
ellipse(0, 600, 80, 80);
ellipse(1000, 600, 80, 80);
strokeWeight(1);
stroke(0, 0, 0);
fill(255);
ellipse(t1.cue_ball.center.x, t1.cue_ball.center.y, 20, 20);
t1.cue_ball.center.x+=dx;
t1.cue_ball.center.y+=dy;
dx=friction(dx);
dy=friction(dy);
stroke(40);
strokeWeight(4);
line ( mouseX , mouseY , mouseX + cos (atan2 ( mouseY -t1.cue_ball.center.y , mouseX - t1.cue_ball.center.x) )*300 , mouseY + sin( atan2 ( mouseY - t1.cue_ball.center.y , mouseX -t1.cue_ball.center.x ))*300);
if (mousePressed)
{
power+=4;
}
if (t1.cue_ball.center.x+20 > 1000 || t1.cue_ball.center.x-20 < 0 )
{
dx*=-1;
player.rewind();
player.play();
}
if (t1.cue_ball.center.y+20 > 600 || t1.cue_ball.center.y-20 < 0)
{
dy*=-1;
player.rewind();
player.play();
}
if( (t1.cue_ball.center.x < 40 && (t1.cue_ball.center.y < 40 ||t1.cue_ball.center.y > 560 ) ) || ( t1.cue_ball.center.x > 980 && ( t1.cue_ball.center.y > 580 || t1.cue_ball.center.y < 40)))
{
dx=0;
dy=0;
fill(255);
textSize(25);
text("GAME OVER" ,500,300);
player.pause();
}
if (t1.cue_ball.center.x +20 == 1000)
{
t1.cue_ball.center.x=979;
}
if (t1.cue_ball.center.x -20 == 0)
{
t1.cue_ball.center.x =21;
}
if(t1.cue_ball.center.y -20 == 0)
{
t1.cue_ball.center.y =21;
}
}
void mouseReleased()
{
dx=t1.cue_ball.center.x-mouseX;
dy=t1.cue_ball.center.y-mouseY;
float n= sqrt(pow(dx,2)+pow(dy,2));
dx*=power/n;
dy*=power/n;
}
float friction (float c)
{
c*=0.9;
return c;
}
class Ball
{
float rad;
Point center;
Point contact_point;
color col;
Ball ( float a, float b)
{
center = new Point (a+=dx, b+=dy);
}
}
class Table
{
Ball [] b_arr;
Stick st;
Ball cue_ball;
Table ( float a, float b )
{
cue_ball= new Ball( a, b);
}
}
class Point
{
float x;
float y;
Point(float a, float b)
{
x=a;
y=b;
}
}
class Stick
{
Point start_p;
Point end_p;
color col;
int length;
}
由于添加了棒,它已经停止能够从墙上反弹,我无法理解为什么。它在添加之前工作,然后它就停止了,当它关闭时它会产生NullPointerException。我不知道怎么坚持会改变任何东西。
答案 0 :(得分:0)
就像你在评论中所说:这个错误是由于缺少声音文件引起的。
如果您没有包含必要的文件或者没有正确设置,则处理通常会抛出NullPointerExceptions
。与获得堆栈跟踪的Java不同,调试这些类型的错误非常困难,因为它们来自Processing内部。
要做的一件事是在代码中添加println()
语句,以帮助缩小所发生的事情。
此外,将来请尝试发布MCVE而不是整个草图。这通常意味着从空白草图开始,只添加足够的代码来重现错误。这避免了这次评论中的所有混淆。