Hello!
I am attempting to make an “aiming line” but it has to be dashed.
How can I make a dashed line? I’ve seen the lerp() function mentioned but they always end up not perfectly straight and kind of whacky looking. I want mine to be straight because it is used as a sort of aiming line. Like on pool games you have your aiming line before you take a shot.
void moveBall() {
if(!wallHit) {
ballX = ballX+ballSpeedX*cos(angle);
ballY = ballY+ballSpeedY*sin(angle); //Moves ball
if(ballX >= width-10 || ballX <= 10 || ballY >= height-10 || ballY <= 10) {
wallHit = true; //Stops ball when it hits a wall
}
} else {
angle = atan2((mouseY-ballY),(mouseX-ballX));
//angle= PI+angle;
float currX = ballX + 50 * cos(angle);
float currY = ballY + 50 * sin(angle);
line(ballX,ballY,currX,currY); //Makes small target line
}
}
void mousePressed() {
wallHit = false;
angle = atan2((mouseY-ballY),(mouseX-ballX));
}
So far I have been able to make the code for the ball to follow the cursor with one little line but how can I make this go all the way to the end of the screen? I am guessing for-loops somehow but I cannot begin to think of exactly how to approach it…
Thanks a bunch!
1 Like
Could you post an mcve
A runnable small version with the line?
Just use lerp with amt values higher than 1
Apologies here is the entire code!
float ballX, ballY;
float angle = random(0, TWO_PI);
float ballSpeedX = 3, ballSpeedY = 3;
boolean wallHit = false;
void setup() {
size(600, 400);
ballX = width/4;
ballY = height/4;
}
void draw() {
background(150);
drawBall();
moveBall();
}
void drawBall() {
final int BALL_SIZE = 20;
final int ballColor = #FA9D12;
fill(ballColor);
ellipse(ballX, ballY, BALL_SIZE, BALL_SIZE);
}
void moveBall() {
if(!wallHit) {
ballX = ballX+ballSpeedX*cos(angle);
ballY = ballY+ballSpeedY*sin(angle); //Moves ball
if(ballX >= width-10 || ballX <= 10 || ballY >= height-10 || ballY <= 10) {
wallHit = true; //Stops ball when it hits a wall
}
} else {
angle = atan2((mouseY-ballY),(mouseX-ballX));
float currX = ballX + 45 * cos(angle);
float currY = ballY + 45 * sin(angle);
line(ballX,ballY,currX,currY); //Makes small target line
}
}
void mousePressed() {
wallHit = false;
angle = atan2((mouseY-ballY),(mouseX-ballX));
}
I will try and figure out that lerp() function again
// I will try and figure out that lerp() function again
float ballX, ballY;
float angle = random(0, TWO_PI);
float ballSpeedX = 3, ballSpeedY = 3;
boolean wallHit = false;
//----------------------------------------------------------------------------------------------------------
void setup() {
size(600, 400);
ballX = width/4;
ballY = height/4;
}
void draw() {
background(150);
drawBall();
moveBall();
}
//----------------------------------------------------------------------------------------------------------
void drawBall() {
final int BALL_SIZE = 20;
final int ballColor = #FA9D12;
fill(ballColor);
ellipse(ballX, ballY,
BALL_SIZE, BALL_SIZE);
}
void moveBall() {
//
if (!wallHit) {
ballX = ballX+ballSpeedX*cos(angle);
ballY = ballY+ballSpeedY*sin(angle); //Moves ball
if (ballX >= width-10 || ballX <= 10 ||
ballY >= height-10 || ballY <= 10) {
wallHit = true; //Stops ball when it hits a wall
}
} else {
angle = atan2((mouseY-ballY), (mouseX-ballX));
float currX = ballX + width*2 * cos(angle);
float currY = ballY + width*2 * sin(angle);
// line(ballX, ballY,
// currX, currY); //Makes small target line
dottedLine( ballX, ballY,
currX, currY );
}
}
void dottedLine(float x1, float y1,
float x2, float y2) {
// dotted line
float steps=30;
for (int i = 0; i <= steps; i++) {
float x = lerp(x1, x2, i/steps);
float y = lerp(y1, y2, i/steps);
point(x, y);
ellipse(x, y,
5, 5);
}
}
void mousePressed() {
wallHit = false;
angle = atan2((mouseY-ballY), (mouseX-ballX));
}
//
1 Like
You can also use the dashed lines library. See recent discussion: