问题描述
因此,当您躲避敌人并且敌人走到屏幕的尽头时,我会尝试编写一个游戏,这是您自己的迷你版本生成,并且如果您或您的迷你版本碰到了敌人,则游戏结束。目前,在进入屏幕末端后,我一直无法生成敌人的随机位置。任何人都有一个主意,我的敌人的立场就是不断反弹。而且,任何人都有关于如何对主要生物和敌人进行碰撞检测的线索。铝的帮助将不胜感激:(我是菜鸟,死了,请帮忙。
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)
,这是有问题的,因为使用此行,您会生成一个随机值,范围介于0
至enemyX
之间就是这样,以后不要使用它。也许您需要编写类似的内容: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/寻求帮助,但在此之前,请尝试编写一个非常简单的代码。