我正在处理一个处理文件,它可以用作卡拉OK系统。 卡拉OK本身就是一部电影。它也适用于积分。
比赛开始前。我想要显示一张照片。 当按下任何键然后释放时,需要从那里开始一系列操作。 我尝试使用if keyPressed函数,但电影(带音乐)似乎从一开始就播放。 它只在您按住钥匙时才有效。我想让它在随机密钥释放时起作用。
游戏开始前需要显示的部分是:
image(beginscherm, 0, 0, 1280, 720);
释放密钥后需要工作的部分来自:
image(mov, 0, 0, 1280, 720);
谁来帮帮我..
import ddf.minim.*;
import processing.video.*;
Movie mov;
Minim minim;
AudioInput input;
int inputNiveau;
float scoreH = 600;
boolean fotomaken = true;
Capture cam;
int x = 0;
PImage beginscherm;
void setup() {
size(1280, 720);
mov = new Movie(this, "karaoke_4.mp4");
mov.play();
cam = new Capture(this, 320, 180, 30);
cam.start();
textSize(28);
minim = new Minim (this);
input = minim.getLineIn (Minim.STEREO, 512);
beginscherm = loadImage("beginscherm.jpg");
}
void movieEvent(Movie m) {
m.read();
}
void draw() {
image(beginscherm, 0, 0, 1280, 720);
image(mov, 0, 0, 1280, 720);
if (cam.available()) {
cam.read();
}
if ((scoreH >= 448.98) && (scoreH <= 451.00)){
pushMatrix();
scale(-1,1);
image(cam, -320, 0);
popMatrix();
}
if ((scoreH >= 449.99) && (scoreH <= 450.00) && (fotomaken == true)){
saveFrame("images/sing-##.png");
fotomaken = false;
}
inputNiveau = int(input.mix.level()*800);
fill(137,197,255,127);
text(inputNiveau, 800, 700);
rect(900, 680, inputNiveau, 20);
scoreH = constrain(scoreH, 0, 600);
scoreH = constrain(scoreH, 0, 580);
noStroke();
fill(49,127,203);
rect(1090,61,85,605,100);
fill(137,197,255,127);
rect(1090,61,85,scoreH,100,100,0,0);
rotate(0.2);
fill(252,209,22);
rect(1070,-210,150,57);
fill(0,56,147);
rect(1070,-154,150,28);
fill(206,17,38);
rect(1070,-126,150,28);
if(inputNiveau >= 0 && inputNiveau <= 150){
scoreH = scoreH - 0.02;
}
if(inputNiveau >= 150 && inputNiveau <= 500){
scoreH = scoreH - 0.06;
}
if(inputNiveau >= 500 && inputNiveau <= 900){
scoreH = scoreH - 0.16;
}
if(inputNiveau >= 900 && inputNiveau <= 1000){
scoreH = scoreH - 0.5;
}
println(scoreH);
}
答案 0 :(得分:0)
最常见的解决方案是提供状态变量并根据当前状态制作draw()
方法。
尝试这样的事情:
int STATE_BEFORE = 1;
int STATE_AFTER = 2;
int state = STATE_BEFORE;
draw() {
if (state == STATE_BEFORE) {
drawBefore();
}
else if (state == STATE_AFTER) {
drawAfer()
}
else if ...
}
void drawBefore() {
image(beginscherm, 0, 0, 1280, 720);
...
}
void drawAfter() {
image(mov, 0, 0, 1280, 720);
...
}
void keyReleased(KeyEvent e) {
char key = e.getKeyChar();
int code = e.getKeyCode();
if (key == ' ') {
changeState( STATE_AFTER );
}
}
void changeState(int newState) {
if (state == STATE_BEFORE) {
// actions when leaving this state
}
if (state == STATE_AFTER) {
// actions when leaving this state
}
state = newState;
}
如您所见 - 某些操作(例如keyPressed)可以更改当前状态。
并且draw()
方法仅绘制依赖于状态的内容。
当然,您可以引入更多状态(STATE_X,STATE_Y等)以及在状态发生变化时执行的更复杂的操作......
您可以在介绍状态以简化draw()
方法时看到我过去的答案:
Run Code Inside One Thread In Another
希望这会有所帮助..
答案 1 :(得分:0)
如果您只有两种状态,则可以使用boolean
变量来定义是否已释放密钥且视频是否正在运行。初始化一些全局变量:
boolean kye_released = false;
此外,您的视频从请求开始,因为您是在setup
内启动的。您需要将mov.play()
移至keyReleased()
事件处理函数。
void keyReleased(){
kye_released = true;
theMov.play();
}
最后认为你需要做的是将它们分开draw()
:
void draw() {
if(kye_released){
image(mov, 0, 0, 1280, 720);
else{
image(beginscherm, 0, 0, 1280, 720);
}
...