我正在尝试在类似于Osu的Processing中创建一个节奏游戏。该游戏应该根据正在播放的音乐创建一个块。在我所处的阶段,只要音乐播放,游戏就会挂起。音乐也被扭曲了。请帮忙!
int start;
float xpos;
float ypos;
int counter = 0;
Boolean menu = true;
Boolean game = false;
import ddf.minim.*;
click Clicker;
Minim minim;
AudioPlayer song;
void setup() {
size (800,800);
Clicker = new click();
start = millis();
}
void draw() {
if (menu) {
text("Welcome to My Game!", 300, 350);
text("Get ready to play", 400, 375);
text("Click on the screen to start", 275, 400);
textSize(35);
}
if(game) {
Clicker.display();
Clicker.click();
Clicker.gui();
int timer = millis()/1000;
text("Time: "+ timer, 10, 760);
minim = new Minim(this);
song = minim.loadFile("Bohemian Rhapsody.mp3");
song.play();
}
}
class click {
float xpos;
float ypos = 50;
float wide;
float high;
float colour;
click() {
wide = 30;
high = 30;
colour = 45;
}
void display() {
background (255);
fill(colour);
rect(xpos, ypos, wide, high);
}
void click() {
if (mousePressed) {
if (mouseX >= xpos && mouseX <= xpos + 30) {
if (mouseY >= ypos && mouseY <= ypos + 30) {
counter = counter + 1;
xpos = random(0, 750);
ypos = random(50, 650);
}
}
}
}
void gui() {
text("Score: " + counter, 10, 790);
textSize(35);
line(0, 700, 800, 700);
}
}
void mousePressed() {
if (menu) {
menu = false;
game = true;
}
}
答案 0 :(得分:0)
有一些事情要修复和改进:
<强> 1。语法/流程
音乐可能失真的原因是因为你在draw()函数中多次初始化minim库。同样,你应该为你的歌曲调用一次play()。这是代码的一个版本,移动了几行:
import ddf.minim.*;
float xpos;
float ypos;
int counter = 0;
Boolean menu = true;
Boolean game = false;
click Clicker;
Minim minim;
AudioPlayer song;
void setup() {
size (800,800);
Clicker = new click();
//initialize the library once, when you setup
minim = new Minim(this);
song = minim.loadFile("Bohemian Rhapsody.mp3");
}
void draw() {
if (menu) {
text("Welcome to My Game!", 300, 350);
text("Get ready to play", 400, 375);
text("Click on the screen to start", 275, 400);
textSize(35);
}
if(game) {
Clicker.display();
Clicker.click();
Clicker.gui();
int timer = millis()/1000;
text("Time: "+ timer, 10, 760);
}
}
class click {
float xpos;
float ypos = 50;
float wide;
float high;
float colour;
click() {
wide = 30;
high = 30;
colour = 45;
}
void display() {
background (255);
fill(colour);
rect(xpos, ypos, wide, high);
}
void click() {
if (mousePressed) {
if (mouseX >= xpos && mouseX <= xpos + 30) {
if (mouseY >= ypos && mouseY <= ypos + 30) {
counter = counter + 1;
xpos = random(0, 750);
ypos = random(50, 650);
}
}
}
}
void gui() {
text("Score: " + counter, 10, 790);
textSize(35);
line(0, 700, 800, 700);
}
}
void mousePressed() {
if (menu) {
menu = false;
game = true;
song.play();//play the song once, when entering game mode
}
}
<强> 2。游戏设计
网上有大量关于此主题的资源,只是简单地玩游戏应该有助于指出几个基本问题:
只要玩家选择点击一个框,您当前的版本就会显示一个永无止境的时间段,以及时间的增加。尝试为每个级别设置一个时间限制。您总是可以引入复杂性来升级(使用首选点击序列同时引入两个框等)。你已经提到过Osu节奏游戏,但是你应该真正地玩它并尝试将它的规则/算法分解为步骤。
第3。节奏游戏
关于节奏的有趣部分是你所看到的,你所听到的(这是一个很好的目标,以及你自己的目标)之间的紧密联系,以及你如何/何时互动。
目前,如果您对音乐发表评论,这对游戏完全没有影响。与音乐根本没有任何关系。您应该尝试根据音乐中的关键时刻添加用户互动。 Minim已经提供了一些onset and beat detection。你应该玩一玩。 (或者,您可以尝试使用Echonest之类的软件或服务进行音乐分析并提取关键时刻,或者只是在软件中手动添加标记并导出csv文件(如果允许)
玩得开心!