Hello,
Can i make a radius for a specific actor in which no other actor can spawn? This "safe area" should move as the actor moves.
The actor that should have the safe area:
And my current method to spawn in the other actors:
Thanks :)
import greenfoot.*;
/**
* The main actor.
*
* @author
* @version 23.09
*/
public class Spaceship extends Actor
{
private static final int NUM_FRAGMENTS = 20;
GifImage myGif = new GifImage("spaceship.gif");
private int dx;
private int dy;
Laser laser = new Laser();
GreenfootSound Ton1 = new GreenfootSound("Laser.wav");
private int horizontalSpeed = 5;
private int verticalSpeed = 5;
explosion explosion = new explosion();
GreenfootSound ExSound = new GreenfootSound("Explosion.wav");
private double v = 0;
private int speed = 0;
private static final int MAX_SPEED = 15;
//private int counter = 10;
GreenfootSound Ton = new GreenfootSound("Engine.mp3");
public Spaceship()
{
GreenfootImage image = getImage();
image.scale(75, 52);
setImage(image);
}
public void act()
{
Bewegen();
pruefeKontaktRand();
shoot();
GIF();
TriggerEx();
}
public void TriggerEx()
{
Rock rock = (Rock)getOneIntersectingObject(Rock.class);;
if (rock != null && getNeighbours(getImage().getWidth()*8/10, false, Rock.class).contains(rock) && rock.hitsShip(this))
{
getWorld().addObject(explosion, getX()+1, getY()+1);
explode2();
ExSound.play();
}
}
private void GIF()
{
setImage( myGif.getCurrentImage() );
GreenfootImage image = getImage();
image.scale(75, 52);
setImage(image);
}
private void Bewegen()
{
if (Greenfoot.isKeyDown("a"))
{
turn(-4);
}
if (Greenfoot.isKeyDown("d"))
{
turn(4);
}
if (Greenfoot.isKeyDown("w"))
{
speed++;
if (speed > MAX_SPEED) speed = MAX_SPEED;
} else if (speed > 0) speed--; move(-speed/3);
if (Greenfoot.isKeyDown("w"))
{
Ton.playLoop();
Ton.setVolume(100);
} else
{
Ton.pause();
}
/*if (Greenfoot.isKeyDown ("w") && Greenfoot.isKeyDown("a"))
{
setRotation(310);
}
if (Greenfoot.isKeyDown ("w") && Greenfoot.isKeyDown("d"))
{
setRotation(50);
}
if (Greenfoot.isKeyDown ("s") && Greenfoot.isKeyDown("a"))
{
setRotation(225);
}
if (Greenfoot.isKeyDown ("s") && Greenfoot.isKeyDown("d"))
{
setRotation(140);
}
*/ }
private void pruefeKontaktRand()
{
if (getX() >=626) {
dx = -dx;
}
if (getX() <=14) {
dx = -dx;
}
if (getY() >=466) {
dy = -dy;
}
if (getY() <=14) {
dy = -dy;
}
}
/*private void shoot()
{
if(Greenfoot.isKeyDown("space"))
{
World Spielfeld = getWorld();
Spielfeld.addObject(laser, 0, 0);
laser.setLocation(getX(), getY());
laser.setRotation(getRotation()-90);
Ton1.play();
Ton1.setVolume(75);
}
}*/
private void shoot()
{
if("space".equals(Greenfoot.getKey())){
Laser laser = new Laser();
getWorld().addObject(laser, getX(), getY());
laser.setRotation(getRotation()-180);
laser.move(40);
Ton1.play();
}
}
public void explode2()
{
placeDestroyed (getX(), getY(), NUM_FRAGMENTS);
DeathScreen deathscreen = new DeathScreen();
ResetInfo resetinfo = new ResetInfo();
getWorld().addObject(deathscreen, 450, 350);
getWorld().addObject(resetinfo, 450, 500);
getWorld().removeObject(this);
Ton.stop();
}
private void placeDestroyed(int x, int y, int numFragments)
{
for (int i=0; i < numFragments; i++) {
getWorld().addObject(new Destroyed(), x ,y );
}
}
}
public void placeRocksBeginning()
{
for (int i = 0; i < 25; i++) {
int x = Greenfoot.getRandomNumber(850);
int y = Greenfoot.getRandomNumber(750);
addObject ( new Rock(), x , y);
rock.setRotation(Greenfoot.getRandomNumber(260));
}
}
public void placeRocks()
{
{
if(Greenfoot.getRandomNumber(70) == 1)
{
int x = Greenfoot.getRandomNumber(850);
int y = Greenfoot.getRandomNumber(750);
addObject(new Rock(), x, y);
rock.setRotation(Greenfoot.getRandomNumber(260));
}
}
}


Adding 1000 rocks with my version looks like this:
Yes, your version also excludes the 100 range, but also a lot more.