Java 敌方任意位置
因此,我试图编写一个游戏,当你躲开敌人,敌人走到屏幕的尽头,一个你自己的迷你版本产生,如果你或你的迷你你碰到敌人,游戏结束。我现在被困在生成随机位置的敌人后,它去了屏幕的尽头。任何人都有一个想法,我的敌人的位置只是在同一个位置反弹。而且,任何人都知道如何对主要生物和敌人进行碰撞检测。艾尔的帮助将不胜感激:(我是个呆子,被卡住了,请帮忙Java 敌方任意位置,java,processing,collision,Java,Processing,Collision,因此,我试图编写一个游戏,当你躲开敌人,敌人走到屏幕的尽头,一个你自己的迷你版本产生,如果你或你的迷你你碰到敌人,游戏结束。我现在被困在生成随机位置的敌人后,它去了屏幕的尽头。任何人都有一个想法,我的敌人的位置只是在同一个位置反弹。而且,任何人都知道如何对主要生物和敌人进行碰撞检测。艾尔的帮助将不胜感激:(我是个呆子,被卡住了,请帮忙 int PosX = 10; int PosY = 10; int counter = 0; float enemyX; float enemyY; float
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,0);
fill(0,180,300);
ellipse(mouseX,mouseY,115,115);
stroke(0,0,0);
fill(255,255,255);
ellipse(mouseX,mouseY+10,95,95);
fill(255,255,255);
stroke(0,0,0);
ellipse(mouseX-12,mouseY-40,20,30);
fill(255,255,255);
stroke(0,0,0);
ellipse(mouseX+12,mouseY-40,20,30);
fill(0,0,0);
stroke(0,0,0);
ellipse(mouseX+7,mouseY-45,8,8);
fill(0,0,0);
stroke(0,0,0);
ellipse(mouseX-7,mouseY-45,8,8);
fill(255,0,0);
stroke(0,0,0);
ellipse(mouseX,mouseY-25,15,15);
fill(255,255,255);
stroke(0,0,0);
line(mouseX,mouseY-18,mouseX,mouseY+20);
line(mouseX-50,mouseY-18,mouseX-10,mouseY-10);
line(mouseX-55,mouseY-1,mouseX-10,mouseY);
line(mouseX-50,mouseY+17,mouseX-10,mouseY+10);
line(mouseX+55,mouseY+1,mouseX+10,mouseY);
line(mouseX+50,mouseY+16,mouseX+10,mouseY+10);
line(mouseX+50,mouseY-17,mouseX+10,mouseY-10);
fill(255,50,0);
arc(mouseX, mouseY+20, 70, 70, 0, PI, PIE);
stroke(0);
fill(255,0,0);
rect(mouseX-40,mouseY+55,80,10,7);
fill(255, 247, 153);
ellipse(mouseX, mouseY+60, 15, 15);
check();
}
void MiniDoraemon(){
stroke(0,0,0);
fill(0,180,300);
ellipse(mouseX,mouseY,115,115);
stroke(0,0,0);
fill(255,255,255);
ellipse(mouseX,mouseY+10,95,95);
fill(255,255,255);
stroke(0,0,0);
ellipse(mouseX-12,mouseY-40,20,30);
fill(255,255,255);
stroke(0,0,0);
ellipse(mouseX+12,mouseY-40,20,30);
fill(0,0,0);
stroke(0,0,0);
ellipse(mouseX+7,mouseY-45,8,8);
fill(0,0,0);
stroke(0,0,0);
ellipse(mouseX-7,mouseY-45,8,8);
fill(255,0,0);
stroke(0,0,0);
ellipse(mouseX,mouseY-25,15,15);
fill(255,255,255);
stroke(0,0,0);
line(mouseX,mouseY-18,mouseX,mouseY+20);
line(mouseX-50,mouseY-18,mouseX-10,mouseY-10);
line(mouseX-55,mouseY-1,mouseX-10,mouseY);
line(mouseX-50,mouseY+17,mouseX-10,mouseY+10);
line(mouseX+55,mouseY+1,mouseX+10,mouseY);
line(mouseX+50,mouseY+16,mouseX+10,mouseY+10);
line(mouseX+50,mouseY-17,mouseX+10,mouseY-10);
fill(255,50,0);
arc(mouseX, mouseY+20, 70, 70, 0, PI, PIE);
stroke(0);
fill(255,0,0);
rect(mouseX-40,mouseY+55,80,10,7);
fill(255, 247, 153);
ellipse(mouseX, mouseY+60, 15, 15);
}
void enemy(){
fill(100,100,240);
ellipse (enemyX, enemyY, 50,50);
ellipse (enemyX, enemyY +10 , 100, 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,mouseY,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;
}
intposx=10;
int-PosY=10;
int计数器=0;
漂浮灌肠;
漂浮灌肠;
浮动速度x;
快速浮动;
浮点数creatureradius=115;
布尔冲突检测;
无效设置(){
帧率(60);
尺寸(600600);
speedX=随机(5);
快速=随机(3);
}
作废提款(){
背景(154206203);
哆啦A梦();
敌人();
检查();
//如果(collisiondetected=true){
//gameOver();
}
//画出主要的生物
虚空哆啦A梦(){
冲程(0,0,0);
填充(0180300);
椭圆(mouseX,mouseY,115115);
冲程(0,0,0);
填充(255255);
椭圆(mouseX,mouseY+10,95,95);
填充(255255);
冲程(0,0,0);
椭圆(mouseX-12,mouseY-40,20,30);
填充(255255);
冲程(0,0,0);
椭圆(mouseX+12,mouseY-40,20,30);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX+7,mouseY-45,8,8);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX-7,mouseY-45,8,8);
填充(255,0,0);
冲程(0,0,0);
椭圆(mouseX,mouseY-25,15,15);
填充(255255);
冲程(0,0,0);
线路(mouseX,mouseY-18,mouseX,mouseY+20);
线路(mouseX-50、mouseY-18、mouseX-10、mouseY-10);
线路(mouseX-55、mouseY-1、mouseX-10、mouseY);
线路(mouseX-50、mouseY+17、mouseX-10、mouseY+10);
行(mouseX+55,mouseY+1,mouseX+10,mouseY);
行(mouseX+50、mouseY+16、mouseX+10、mouseY+10);
线路(mouseX+50、mouseY-17、mouseX+10、mouseY-10);
填充(255,50,0);
弧(mouseX,mouseY+20,70,70,0,PI,PIE);
冲程(0);
填充(255,0,0);
rect(mouseX-40,mouseY+55,80,10,7);
填充(255、247、153);
椭圆(mouseX,mouseY+60,15,15);
检查();
}
虚空迷你哆啦A梦(){
冲程(0,0,0);
填充(0180300);
椭圆(mouseX,mouseY,115115);
冲程(0,0,0);
填充(255255);
椭圆(mouseX,mouseY+10,95,95);
填充(255255);
冲程(0,0,0);
椭圆(mouseX-12,mouseY-40,20,30);
填充(255255);
冲程(0,0,0);
椭圆(mouseX+12,mouseY-40,20,30);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX+7,mouseY-45,8,8);
填充(0,0,0);
冲程(0,0,0);
椭圆(mouseX-7,mouseY-45,8,8);
填充(255,0,0);
冲程(0,0,0);
椭圆(mouseX,mouseY-25,15,15);
填充(255255);
冲程(0,0,0);
线路(mouseX,mouseY-18,mouseX,mouseY+20);
线路(mouseX-50、mouseY-18、mouseX-10、mouseY-10);
线路(mouseX-55、mouseY-1、mouseX-10、mouseY);
线路(mouseX-50、mouseY+17、mouseX-10、mouseY+10);
行(mouseX+55,mouseY+1,mouseX+10,mouseY);
行(mouseX+50、mouseY+16、mouseX+10、mouseY+10);
线路(mouseX+50、mouseY-17、mouseX+10、mouseY-10);
填充(255,50,0);
弧(mouseX,mouseY+20,70,70,0,PI,PIE);
冲程(0);
填充(255,0,0);
rect(mouseX-40,mouseY+55,80,10,7);
填充(255、247、153);
椭圆(mouseX,mouseY+60,15,15);
}
无效敌人(){
填充(100100240);
椭圆(灌肠,灌肠,50,50);
椭圆(灌肠,灌肠+10100,30);
灌肠移动();
}
void enemymove(){
离谱();
enemyX=enemyX+speedX;
灌肠=灌肠+快速;
}
void out of bound(){
如果((灌肠>宽度+80|||灌肠<-80)&(灌肠>高度+80||灌肠<-80)){
随机(灌肠);
随机(灌肠);
speedX=speedX*-1;
迅捷=迅捷*-1;
}
}
迷你哆啦A梦(){
迷你哆啦A梦();
}
空隙距离(){
}
无效检查(){
if(距离(鼠标、鼠标、灌肠、灌肠)<50+创造者半径){
填充(255);
}否则{
填充(0);
}
}
void gameover(){
}
//群集效应:
int Swarm(int开始,int结束){
int fly=(结束-启动)/24+启动;
回飞;
}
Java严格按值传递。因此,随机(enemyX)
复制当前持有的enemyX
的值,并将此副本传递给random
方法,然后该方法完全被拧紧,无法执行此任务:它可以整天修改其副本,这不起任何作用,无法确定您是否通过了enemyX
(比如说,enemyY
),你不会对结果做任何事情
相反,您正在寻找:
enemyX = random();
其中,随机性是指:
private static final Random rnd = new Random(PosX);
float random(int max) {
return max * rnd.nextFloat();
}
您的代码很难阅读;大概游戏环境定义为X位置在[0,PosX]和[0,PosY]之间对于Y位置,但如果这是错误的,则相应地调整上述代码。像write@rzwitserloot一样,您的代码不清楚,无法理解您的问题。您需要编写一个尽可能小的代码,以隔离您的错误或问题。但当我阅读代码的最后一部分时,我可能会随机阅读(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 ",enemyX,enemyY,speedX,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;
}
}
int-enemyX=10000;
int enemyY=10000;
int-speedX=1;
int=1;
无效设置(){
println(“之前”,enemyX,enemyY,speedX,speedY);
离谱();
println(“之后”,enemyX,enemyY,speedX,speedY);
}
void out of bound(){
int-marge=80;
int min_x=-marge;
int max_x=宽度+边缘;
int min_y=-marge;
int max_y=宽度+边缘;
println(“画布”,最小值x,最大值x,最小值y,最大值y);
如果((灌肠>最大灌肠<最小灌肠)&(灌肠>最大灌肠<最小灌肠)){
enemyX=(int)随机(最小值x,最大值x);
enemyY=(int)随机(最小值,最大值);
speedX=speedX*-1;
迅捷=迅捷*-1;
}
}
您可以在此处寻求帮助,但在此之前,请尝试编写一个非常简单的代码。当您在outbound中调用random时,您不会将结果分配给任何内容。