I have a game of Breaking Bricks I am working on. Ive been trying to change the image of the smoke every time the ball hits a brick, and I really have no clue how.
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Ball extends Actor
{
private final int MAX_SPEED = 5;
private int deltaX; // x movement speed
private int deltaY; // y movement speed
private int count = 2;
private boolean stuck = true; // stuck to paddle
private Brick brick;
public void act()
{
if (!stuck && !((Board) getWorld()).getCheck())
{
move();
makeSmoke();
checkOut();
}
}
private void move()
{
setLocation (getX() + deltaX, getY() + deltaY);
checkPaddle();
checkBrick();
checkWalls();
}
private void checkPaddle()
{
Actor paddle = getOneIntersectingObject(Paddle.class);
if (paddle != null && getY() < paddle.getY()) {
deltaY = -deltaY;
int offset = getX() - paddle.getX();
deltaX = deltaX + (offset/10);
if (deltaX > MAX_SPEED) {
deltaX = MAX_SPEED;
}
if (deltaX < -MAX_SPEED) {
deltaX = -MAX_SPEED;
}
Greenfoot.playSound("Pad.wav");
}
}
private void checkBrick()
{
brick = (Brick)getOneIntersectingObject(MetalBrick.class);
if(brick==null){
brick = (Brick)getOneIntersectingObject(NormalBrick.class);
}
if(brick != null){
if(getY() > brick.getY()){
setLocation(getX(),getY()+2);
deltaY = -deltaY;
}
else if(getY() < brick.getY()){
setLocation(getX(),getY()-2);
deltaY = -deltaY;
}
else{
deltaX = -(deltaX+1);
}
if(brick instanceof MetalBrick){
Greenfoot.playSound("Bop.wav");
MetalBrick metalBrick = (MetalBrick)brick;
metalBrick.decreaseCount();
if(metalBrick.isZero()){
metalBrick.remove();
((Board) getWorld()).breakBrick();
}
else{
metalBrick.updateImage();
}
}
if(brick instanceof NormalBrick){
Greenfoot.playSound("Bop.wav");
NormalBrick normalBrick = (NormalBrick)brick;
normalBrick.decreaseCount();
if(normalBrick.isZero()){
normalBrick.remove();
((Board) getWorld()).breakBrick();
}
}
}
}
private void checkWalls()
{
if (getX() == 0 || getX() == getWorld().getWidth()-1) {
deltaX = -deltaX;
}
if (getY() == 0) {
deltaY = -deltaY;
}
}
private void checkOut()
{
if (getY() == getWorld().getHeight()-1) {
((Board) getWorld()).ballIsOut();
getWorld().removeObject(this);
}
}
public void moveLR(int dist)
{
setLocation (getX() + dist, getY());
}
public void moveUD(int dist)
{
setLocation (getX(), getY() + dist);
}
private void makeSmoke()
{
count--;
if (count == 0) {
getWorld().addObject ( new Smoke(), getX(), getY());
count = 2;
}
}
public void release()
{
deltaX = Greenfoot.getRandomNumber(11) - 5;
deltaY = -MAX_SPEED;
stuck = false;
}
}
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
public class Smoke extends Actor
{
private GreenfootImage image; // the original image
private int fade; // the rate of fading
public Smoke()
{
image = getImage();
fade = Greenfoot.getRandomNumber(4) + 1; // 1 to 3
if (fade > 3) {
fade = fade - 2;
}
}
public void act()
{
shrink();
}
private void shrink()
{
if(getImage().getWidth() < 10) {
getWorld().removeObject(this);
}
else {
GreenfootImage img = new GreenfootImage(image);
img.scale ( getImage().getWidth()-fade, getImage().getHeight()-fade );
setImage (img);
}
}
}
(very new to coding,sorry if this is unnecessary)