Hi there, my problem is, that Enemies, which move on their own (they follow me), can go through structions/objects. The Player I move doesn't. Can someone help me fixxing the issue?
Code from one Ememy: Thats the code from the player:
import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot und MouseInfo)
/**
* Ergänzen Sie hier eine Beschreibung für die Klasse enemy.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class Enemy extends Actor
{
static int died = 0;
int enemyspeed= 1;
/**
* Act - tut, was auch immer enemy tun will. Diese Methode wird aufgerufen,
* sobald der 'Act' oder 'Run' Button in der Umgebung angeklickt werden.
*/
public void act()
{
int y = getY();
int x = getX();
if(Greenfoot.getRandomNumber(400)>Person.xPerson && x>Person.xPerson){
moveLeft();
}else if(Greenfoot.getRandomNumber(400)-20<Person.xPerson&& x<Person.xPerson){
moveRight();
}
if(Greenfoot.getRandomNumber(400)>Person.yPerson && y>Person.yPerson){
moveUp();
}else if(Greenfoot.getRandomNumber(400)<Person.yPerson && y<Person.yPerson){
moveDown();
}
if(checkHit()){
died++;
coinDrop();
destroy();
}
}
public boolean checkHit(){
if(getIntersectingObjects(DownBullet.class).size() > 0) {
return true;
}
if(getIntersectingObjects(UpperBullet.class).size() > 0) {
return true;
}
if(getIntersectingObjects(LeftBullet.class).size() > 0) {
return true;
}
if(getIntersectingObjects(RightBullet.class).size() > 0) {
return true;
}
return false;
}
private void destroy() {
removeTouching(LeftBullet.class);
removeTouching(RightBullet.class);
removeTouching(UpperBullet.class);
removeTouching(DownBullet.class);
getWorld().removeObject(this);
}
public void moveLeft() {
setLocation(getX() - enemyspeed, getY());
}
public void moveRight() {
setLocation(getX() + enemyspeed, getY());
}
public void moveUp() {
setLocation(getX(), getY() - enemyspeed);
}
public void moveDown() {
setLocation(getX(), getY() + enemyspeed);
}
public boolean checkCollision(){
if(getIntersectingObjects(Object_Senkrecht.class).size() > 0) {
return true;
}
if(getIntersectingObjects(Object_Waagerecht.class).size() > 0) {
return true;
}
if(getIntersectingObjects(Object_ks.class).size() > 0) {
return true;
}
if(getIntersectingObjects(Object_kw.class).size() > 0) {
return true;
}
return false;
}
public void coinDrop(){
if(Greenfoot.getRandomNumber(100)>=85){
getWorld().addObject(new DogeCoin(), getX(), getY());
}
}
} import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
* Write a description of class Person here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Person extends Actor
{
int Welt;
int moveSpeed = 1;
boolean up = true, left = true, right = true, down = true;
static int xPerson = 0;
static int yPerson = 0;
static int coins = 0;
public Person(int w) {
Welt = w;
}
public void act()
{
xPerson = getX();
yPerson = getY();
String m = movement();
if(checkCollision()) {
if(m.indexOf("d") > -1) {
moveLeft();
}
if(m.indexOf("a") > -1) {
moveRight();
}
if(m.indexOf("s") > -1) {
moveUp();
}
if(m.indexOf("w") > -1) {
moveDown();
}
}
if(Enemy.died == 30){
setImage("Charakter2.png");
if(getY()>=390){
Welt = Welt + 1;
if(Welt == 2){
Greenfoot.setWorld(new World2(220,30));
setImage("Charakter.png");
}
if(Welt == 3){
Greenfoot.setWorld(new World3(220,30));
setImage("Charakter.png");
}
if(Welt == 4){
Greenfoot.setWorld(new World4(220,30));
setImage("Charakter.png");
}
}
}
shoot();
}
private int shotTimer = 0;
public void shoot()
{
if (shotTimer > 0) {
shotTimer = shotTimer -1;
}else if(Greenfoot.isKeyDown("down"))
{
getWorld().addObject(new DownBullet(), getX(), getY());
shotTimer = 20;
}else if(Greenfoot.isKeyDown("right")) { // oder welche Taste auch immer es sein soll
getWorld().addObject(new RightBullet(), getX(), getY());
shotTimer = 20;
}else if(Greenfoot.isKeyDown("up")) { // oder welche Taste auch immer es sein soll
getWorld().addObject(new UpperBullet(), getX(), getY());
shotTimer = 20;
}else if(Greenfoot.isKeyDown("left")){
getWorld().addObject(new LeftBullet(), getX(), getY());
shotTimer = 20;
}
}
public boolean checkCollision(){
if(getIntersectingObjects(Object_Senkrecht.class).size() > 0) {
return true;
}
if(getIntersectingObjects(Object_Waagerecht.class).size() > 0) {
return true;
}
if(getIntersectingObjects(Object_ks.class).size() > 0) {
return true;
}
if(getIntersectingObjects(Object_kw.class).size() > 0) {
return true;
}
if(getIntersectingObjects(g11.class).size() > 0) {
return true;
}
if(getIntersectingObjects(g12.class).size() > 0) {
return true;
}
if(getIntersectingObjects(g16.class).size() > 0) {
return true;
}
if(getIntersectingObjects(g21.class).size() > 0) {
return true;
}
if(getIntersectingObjects(g22.class).size() > 0) {
return true;
}
if(getIntersectingObjects(g61.class).size() > 0) {
return true;
}
return false;
}
public void moveLeft() {
setLocation(getX() - moveSpeed, getY());
}
public void moveRight() {
setLocation(getX() + moveSpeed, getY());
}
public void moveUp() {
setLocation(getX(), getY() - moveSpeed);
}
public void moveDown() {
setLocation(getX(), getY() + moveSpeed);
}
public String movement() {
String result = "";
if(Greenfoot.isKeyDown("w")) {
moveUp();
result+="w";
}
if(Greenfoot.isKeyDown("a")) {
moveLeft();
result+="a";
}
if(Greenfoot.isKeyDown("s")) {
moveDown();
result+="s";
}
if(Greenfoot.isKeyDown("d")) {
moveRight();
result+="d";
}
return result;
}
}