I want to have it so when the object (redportal_ball) gets within 10 pixels of a wall that it will create a portal (redportal).
Whenever I use the following code, no matter how small I make the radius for getObjectsInRange() it always creates the portal right away (as soon as it is shot even though it is not within range of a wall).
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.lang.*; /** * Write a description of class redportal_ball here. * * @author (your name) * @version (a version number or a date) */ public class redportal_ball extends Actor { /** * Act - do whatever the redportal_ball wants to do. This method is called whenever * the 'Act' or 'Run' button gets pressed in the environment. */ public GameWorld board = (GameWorld) getWorld(); public boolean created = false; public MouseInfo mouse = Greenfoot.getMouseInfo(); public void act() { GameWorld board = (GameWorld) getWorld(); move(20); Actor wall; if (!created) { setRotation(findangle()); //Rotates the ball ONLY ONCE after it's been created. } if ((getObjectsInRange(5, wall.class) != null)) { if (getObjectsInRange(1000, redportal.class).size() > 0) { board.removeObjects(board.getObjects(redportal.class)); } redportal portal = new redportal(); board.addObject(portal, this.getX(), this.getY()); board.removeObject(this); } created = true; } public int findangle() { int mouseX = mouse.getX(); int mouseY = mouse.getY(); double deltaX = (mouseX - this.getX()); //Change in X double deltaY = (mouseY - this.getY()); //Change in Y double angle = Math.atan2(deltaY, deltaX); //Finds angle with deltaX and deltaY angle = Math.toDegrees(angle); int angle_return = (int)(angle); System.out.println(angle_return + " " + angle + " " + mouseX + " " + mouseY); return angle_return; } }