敌人的随机位置

问题描述

因此,当您躲避敌人并且敌人走到屏幕的尽头时,我会尝试编写一个游戏,这是您自己的迷你版本生成,并且如果您或您的迷你版本碰到了敌人,则游戏结束。目前,在进入屏幕末端后,我一直无法生成敌人的随机位置。任何人都有一个主意,我的敌人的立场就是不断反弹。而且,任何人都有关于如何对主要生物和敌人进行碰撞检测的线索。铝的帮助将不胜感激:(我是菜鸟,死了,请帮忙。

int PosX = 10;
int PosY = 10;
int counter = 0;
float enemyX;
float enemyY;
float speedX;
float speedY;
float creatureradius = 115;
boolean collisiondetected;



void setup(){
frameRate(60);
size(600,600); 
speedX = random(5);
speedY = random(3);

  
}

void draw(){
  background(154,206,203);
  doraemon();
  enemy();
  check();
  
  //if(collisiondetected = true){
    //gameOver();
  }

// draw the main creature
void doraemon(){
stroke(0,0);
fill(0,180,300); 
ellipse(mouseX,mouseY,115,115); 
stroke(0,0);
fill(255,255,255); 
ellipse(mouseX,mouseY+10,95,95); 
fill(255,255); 
stroke(0,0);
ellipse(mouseX-12,mouseY-40,20,30); 
fill(255,0);
ellipse(mouseX+12,30); 
fill(0,0); 
stroke(0,0);
ellipse(mouseX+7,mouseY-45,8,8); 
fill(0,0);
ellipse(mouseX-7,8); 
fill(255,0);
ellipse(mouseX,mouseY-25,15,15); 
fill(255,0);
line(mouseX,mouseY-18,mouseX,mouseY+20); 
line(mouseX-50,mouseX-10,mouseY-10);
line(mouseX-55,mouseY-1,mouseY);
line(mouseX-50,mouseY+17,mouseY+10);
line(mouseX+55,mouseY+1,mouseX+10,mouseY);
line(mouseX+50,mouseY+16,mouseY+10);
line(mouseX+50,mouseY-17,mouseY-10);
fill(255,50,0); 
arc(mouseX,mouseY+20,70,PI,PIE);
stroke(0);
fill(255,0); 
rect(mouseX-40,mouseY+55,80,10,7); 
fill(255,247,153);
ellipse(mouseX,mouseY+60,15);
check();
}


void MiniDoraemon(){
stroke(0,15);

}

  
void enemy(){
  fill(100,100,240);
  ellipse (enemyX,enemyY,50);
  ellipse (enemyX,enemyY +10,30);  
  enemymove();
  }


void enemymove(){
  outofbound();
  enemyX = enemyX+speedX;
  enemyY = enemyY+speedY;
}

void outofbound(){
  if((enemyX > width+80 || enemyX < -80) && (enemyY>height+80 || enemyY < -80)){
    random(enemyX);
    random(enemyY);
    speedX = speedX * -1;
    speedY = speedY * -1;
    
}
}

void spawnMiniDoraemon(){
  MiniDoraemon();
}

  
void distance(){
  
}





void check(){
if (dist(mouseX,enemyX,enemyY)< 50+creatureradius){
  fill(255);
}else{
  fill(0);
}
}
  
    


  

void gameover(){
}


// Swarming effect:
int Swarm(int starting,int end){
  int fly = (end - starting)/24 + starting;
  return fly;
  

}

解决方法

Java严格按值传递。因此,random(enemyX)会复制{em>当前持有的值的副本,并将此副本传递给enemyX方法,然后将其完全拧紧并可以不做这项工作:它可以整天修改其副本,这将无济于事,无法确定您是否特别通过了random(相对于enemyX),并且您对结果不做任何事情。

相反,您正在寻找:

enemyY

随机是这样的:

enemyX = random();

您的代码难以阅读;大概将比赛场地定义为介于X位置的[0,PosX]和Y位置的[0,PosY]之间,但是如果这是错误的,则相应地调整上面的代码。

,

就像写@rzwitserloot一样,您的代码不清楚以了解您的问题。您需要编写尽可能小的代码,以隔离您的错误或问题。但是,当我阅读您的代码的最后一部分时,有可能我阅读了random(enemyX),这是有问题的,因为使用此行,您会生成一个随机值,范围介于0enemyX之间就是这样,以后不要使用它。也许您需要编写类似的内容:enemyX = random(enemyX),但我不是您想要的。

以防万一重构代码有点像那样……如果可以的话。

int enemyX = 10000;
int enemyY = 10000;
int speedX = 1;
int speedY = 1;
void setup() {
  println("before ",enemyX,enemyY,speedX,speedY);
  outofbound();
  println("after ",speedY);
}

void outofbound() {
  int marge = 80;
  int min_x = -marge;
  int max_x = width+marge;
  int min_y = -marge;
  int max_y = width+marge;
  println("canvas",min_x,max_x,min_y,max_y);
  if((enemyX > max_x || enemyX < min_x) && (enemyY > max_y || enemyY < min_y)) {
    enemyX = (int)random(min_x,max_x);
    enemyY = (int)random(min_y,max_y);
    speedX = speedX * -1;
    speedY = speedY * -1;
  }
}

您可以在https://discourse.processing.org/寻求帮助,但在此之前,请尝试编写一个非常简单的代码。