Hol lehet a hiba?
elkezdtem ismerkedni a processing nyelvvel.
a programomnak azt kéne csinálnia, hogy megjelenik egy ablak, ami a jobb felső sarokban számolja az eltelt másodperceket. amikor kattintok 5 mp-ig pirosnak kéne lennie a képernyőnek (mp számláló nélkül), ezután számláló lenulláz és minden mehet elölről.
a problémám, hogy nem 5 mp-ig piros, hanem csak a kattintás utáni 5. mp utolsó pillanata.
a kód:
int m;
int start;
void setup(){
size(750,750);
start = millis();
}
void draw(){
m = (millis()-start)/1000;
background(135);
fill(255);
textSize(16);
text(m,700,15);
}
void mousePressed(){
start = millis();
m = (millis()-start)/1000;
while(m<5){
m = (millis()-start)/1000;
background(255,0,0);
}
start = millis();
}
A draw() milyen gyakran fut le?
"start = millis();
m = (millis()-start)/1000;"
Itt az m mindig 0 lesz, fölösleges számolgatás.
"while(m<5){
m = (millis()-start)/1000;
background(255,0,0);
}"
Ez meg pokoli sokszor lefut, teljesen fölöslegesen.
Egyszer kéne pirosra színezni és addig blokkolni a draw()-t valahogy.
"start = millis();
m = (millis()-start)/1000;"
bármikor hívod meg a millis() függvényt, a program indulásától számított időt adja vissza, tehát pl. ha 3 mp-nél kattintok, a start 3000 lesz, a progi fut tovább, az inditástól számított 6. mp-nél az m =(6000-3000)/1000, ami 3.
"while(m<5){
m = (millis()-start)/1000;
background(255,0,0);
}"
fogalmam sincs, hogy hogy lehetne blokkolni a draw()-t. ha te tudod vagy [link] itt találsz valami wait-hez hasonló dolgot, akkor azt megköszönöm, mert az is nagy segítség lenne.
egyébként nem tudom, hogy ilyenkor mi van, de ha valamennyire kiviszem a képernyőről az ablakot, amiben fut, miután kattintottam, akkor piros lesz és ha letelt a kattintástól számított 5 mp, akkor megy tovább ahogy kéne, csak minden kattintás után ezt kéne játszani.
:D :D: D
???
"bármikor hívod meg a millis() függvényt, a program indulásától számított időt adja vissza, tehát pl. ha 3 mp-nél kattintok, a start 3000 lesz, a progi fut tovább, az inditástól számított 6. mp-nél az m =(6000-3000)/1000, ami 3."
Akkor egy kis mateklecke:
"start = millis();
m = (millis()-start)/1000;"
m = (millis() - millis()) / 1000;
m = (0) / 1000;
m = 0;
"fogalmam sincs, hogy hogy lehetne blokkolni a draw()-t. ha te tudod vagy [link] itt találsz valami wait-hez hasonló dolgot, akkor azt megköszönöm, mert az is nagy segítség lenne."
1 másodperc volt megtalálni.
[link] draw_.html
"Called directly after setup(), the draw() function continuously executes the lines of code contained inside its block until the program is stopped or noLoop() is called. draw() is called automatically and should never be called explicitly."
a setup-on belüli start = millis(); az mindig 0. a mousPressed viszont csak akkor lesz meghívva ha kattintok, ott pedig a start új értéket kap, mégpedig az indulástól a kattintásig eltelt ezredmásodpercek számát.
egyébként köszi a segítséget mindjárt nézem is, hogy működik-e. :)
"a setup-on belüli start = millis(); az mindig 0. a mousPressed viszont csak akkor lesz meghívva ha kattintok, ott pedig a start új értéket kap, mégpedig az indulástól a kattintásig eltelt ezredmásodpercek számát."
Ezt értem, de ettől az m még mindig 0 lesz. :D
"void mousePressed(){
start = millis();
m = (millis()-start)/1000;
..."
ja, hogy erre gondolsz. :D az nem véletlenül lesz mindig 0.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!