Բովանդակություն:

Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն. 13 քայլ
Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն. 13 քայլ

Video: Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն. 13 քայլ

Video: Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն. 13 քայլ
Video: Угрюм-река (1969) (1 серия) фильм 2024, Հուլիսի
Anonim
Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն
Processրագրավորման մշակման հետաքրքիր ուղեցույց դիզայների համար. MediaԼՄ-ների բեռնում և իրադարձություն

Մշակումը կարող է բեռնվել բազմաթիվ արտաքին տվյալների, որոնցից երեքը շատ հաճախ օգտագործվում են: Դրանք առանձին են `պատկեր, աուդիո և վիդեո:

Այս գլխում մենք խոսելու ենք այն մասին, թե ինչպես կարելի է մանրամասն բեռնել աուդիո և վիդեո ՝ համատեղելով իրադարձությունների հետ: Ի վերջո, դուք կարող եք ստեղծել ձեր սեփական երաժշտական ստեղնաշարը կամ երաժշտական պալիտրա:

Քայլ 1: Կարդացեք պատկերը

Նախքան սկսելը, եկեք հետ նայենք պատկերի բեռնման եղանակին:

Քայլ 2: Պատկերի հետ կապված գործառույթներ

Այս գործառույթներից օգտվելուց առաջ մենք պետք է PImage- ի միջոցով ստեղծենք պատկերի օբյեկտ: Այնուհետեւ մենք կարող ենք օգտագործել այս գործառույթները `բոլոր տեսակի պատկերի հատկությունները սահմանելու համար:

Մի մոռացեք ձեր պատկերի աղբյուրները տվյալների ֆայլում պահել նախքան ձեր ծրագիրը գործարկելը:

Քայլ 3: Երաժշտության բեռնում, նվագարկում և դադարեցում

Ստորև ՝ մենք սկսում ենք ձեզ պաշտոնապես ներկայացնել երաժշտության կոչը: Շատ նման է պատկերի բեռնումին, սկզբում պետք է հայտարարեք աուդիո օբյեկտ: Ստորև բերված օրինակին կարող եք անդրադառնալ իրական քերականությունից:

Կոդի օրինակ (10-1):

[cceN_cpp theme = "dawn"] ներմուծում processing.sound.*;

SoundFile ձայն;

void setup () {

չափը (640, 360);

ֆոն (255);

ձայն = նոր SoundFile (սա, "1.mp3");

}

դատարկ վիճակահանություն () {

}

void keyPressed () {

// Նվագարկել ձայնը

եթե (բանալին == 'p') {

sound.play ();

}

// Դադարեցնել ձայնը

if (key == 's') {

sound.stop ();

}

} [/cceN_cpp]

Նախապատրաստում.

Մշակումը ինքնին ձայնային գրադարան չի կրում: Դուք պետք է ներբեռնեք այն ինքնուրույն: Այսպիսով, ձեր ծածկագիրը գրելուց առաջ ավելի լավ է կատարել հետևյալ նախապատրաստությունները.

Ավելացնել գրադարան վերամշակմանը: Ահա սովորական պրակտիկան: Ընտրեք «Գործիք»- «Ավելացնել գործիք» ընտրացանկի տողից, այնուհետև անցեք «Գրադարաններ»: Գրադարանի հիմնական բառերը մուտքագրեք որոնման սյունակում, որպեսզի կարողանաք ուղղակիորեն ներբեռնել և տեղադրել այն:

Այնուամենայնիվ, եթե մենք օգտագործում ենք այս գործառույթը մեր հայրենի երկրում (Չինաստանում), մենք չենք կարող ներբեռնել այն ՝ ուղղակիորեն համացանցը միացնելով: Մենք պետք է գործարկենք VPN. Չնայած մենք սկսում ենք այն, կլինեն անկայուն պայմաններ: Այսպիսով, մի քանի անգամ փորձելու համար պետք է համբերատար լինել: Սա բեռնման ամենահարմար մեթոդն է: Եթե դուք չեք կարող տեղադրել, ապա դուք պետք է ներբեռնեք պաշտոնական կայքից `ձեռնարկով: (https://processing.org/reference/libraries/) Քանի որ ձեռքով տեղադրման մեթոդը շատ բարդ է, այն հետագայում կքննարկենք մյուս գլխում:

Կոդի բացատրություն.

Ձայնային գրադարանը կարող է ճիշտ աշխատել նախապատրաստական աշխատանքների ավարտից հետո: Հաղթահարեք վերը նշված կոդը, կտտացրեք RUN, ապա այն կգործի: Սեղմեք «P» ստեղնը ՝ երաժշտություն նվագարկելու համար, «S» ՝ երաժշտությունը դադարեցնելու համար:

Եթե այն սովոր է ծրագրին, ապա նախ պետք է այն բեռնել: Սկզբում մենք պետք է ավելացնենք «ներմուծման մշակում. Ձայն.*» Նախադասություն: «ներմուծում» է առանցքային բառը, որը նշանակում է բառացիորեն բեռնում: Ավելացրեք գրադարանի անունը «ներմուծման» հետևում, այնուհետև այն կբեռնի գրադարանը: Պոչը սովորաբար հետևում է «*» նշանին, ուստի այն գրադարանին առնչվող բոլոր դասերը կբեռնի ծրագրում ՝ առանց դրանք ձեռքով մեկ առ մեկ ավելացնելու:

Երկրորդ նախադասության մեջ «SoundFile sound;» - ը հայտարարել է աուդիո օբյեկտ: SoundFile- ը նման է PImage- ին:

Ֆունկցիայի տեղադրման ընթացքում «sound = new SoundFile (սա," 1.mp3 ");" օգտագործվում է օբյեկտ ստեղծելու և դրա ընթերցման ուղին սահմանելու համար: Այստեղ մենք իրականում արդեն սկսել ենք օգտագործել Class նոր հասկացությունը: Այս պահին մենք դա խորապես չենք քննարկում: Մենք միայն պետք է իմանանք, որ դա գրելու ֆիքսված մեթոդ է, և վերջին պարամետրը երաժշտության աղբյուրի հասցեն լրացնելու համար է:

KeyPressed () իրադարձությունների շարքում «sound.play ()» և «sound.stop ()» համեմատաբար աշխատում են որպես խաղի և դադարեցման էֆեկտ: "." մեջտեղում նշվում է անդամի գործառույթը, որը նվագարկումը և դադարը պատկանում են աուդիո օբյեկտներին: Մենք կարող ենք անդամի գործառույթը դիտարկել որպես օբյեկտում ներառված գործառույթ: Այն պատկանում է այս օբյեկտին, որը նախապես սահմանված է: Հետագայում, երբ մենք պետք է նվագարկենք բազմաթիվ աուդիո օբյեկտներ, պետք է միայն ավելացնել.. Play () »հարաբերական փոփոխականի անվան հետևում:

Աուդիո աղբյուրները պետք է պահվեն տվյալների ֆայլում `sketchfile- ի նույն կատալոգի ներքո (pde ածանցով): Եթե չկա, կարող եք ձեռքով ստեղծել մեկը:

Մի մոռացեք գրել ֆունկցիայի նկարչություն: Չնայած որ դուք ոչ մի գրաֆիկա չեք նկարել, սակայն անհրաժեշտ է հաջողությամբ նվագել երաժշտություն:

Վերոնշյալ ընթացակարգը բավականին բարդ է թվում, բայց անհրաժեշտ է ավելացնել միայն մի քանի նախադասություն ծածկագիր, այնուհետև կարող եք իրականացնել խաղալու գործառույթը: Շատ հարմար է:

Մշակումը ապահովում է սովորական աուդիո ձևաչափեր, ինչպիսիք են mp3, wav, ogg և այլն:

Քայլ 4: Երաժշտության արագության վերահսկում

Հետևյալ օրինակները կսկսեն դառնալ շատ հետաքրքիր: Մշակումը ապահովել է որոշ գործառույթներ, որոնք կարող են վերահսկել երաժշտության նվագարկման արագությունը: Միևնույն ժամանակ, հնչյունները կփոխվեն երաժշտության նվագարկման արագությամբ: Երբ մենք օգտագործում ենք մկնիկը վերահսկելու համար, այն կստեղծի շատ հոգեբանական ազդեցություն:

Տեսանյութի կայք ՝

Կոդի օրինակ (10-2):

[cceN_cpp theme = "dawn"] ներմուծում processing.sound.*;

SoundFile ձայն;

void setup () {

չափը (640, 360);

ֆոն (255);

ձայն = նոր SoundFile (սա, "1.mp3");

}

դատարկ վիճակահանություն () {

բոց արագություն = mouseX/(բոց) լայնություն * 3;

ձայն. տոկոսադրույք (արագություն);

float vol = mouseY/(float) բարձրություն * 4;

sound.amp (հատոր);

}

void keyPressed () {

// Ձայն նվագել

եթե (բանալին == 'p') {

sound.play ();

}

// Դադարեցնել ձայնը

if (key == 's') {

sound.stop ();

}

} [/cceN_cpp]

Կոդ Բացատրեք.

Ֆունկցիան.rate () վերահսկում է աուդիո նվագարկման արագությունը: Փակագծում նշված արժեքը որոշում է արագության արագությունը և դանդաղությունը: Երբ արժեքը 1 է, խաղալու արագությունը նորմալ է: Երբ այն գերազանցում է 1 -ը, ապա արագացրեք; մինչ այն 1 -ի տակ է, ապա դանդաղեցրեք:

. Amp () գործառույթը վերահսկում է ձայնի ձայնը: Փակագծում նշված արժեքը որոշում է ծավալի արժեքը: Երբ այն 1 է, ծավալի արժեքը նորմալ է: Երբ այն 1 -ից դուրս է, ապա ավելացրեք ծավալը; մինչ այն 1 -ի տակ է, ապա նվազեցրեք ծավալը:

Այստեղ մենք կառուցել ենք երկու տեղական փոփոխական արագություն և ծավալ, որպես պարամետրեր, որոնք պետք է բեռնվեն: Հետևաբար, մկնիկի հորիզոնական կոորդինատը կփոխի երաժշտության հնչողությունը, իսկ ուղղահայաց կոորդինատը `երաժշտության ձայնը:

Քայլ 5: Տեսանյութի նվագարկում և դադարեցում

Վերամշակման մեջ տեսանյութերի բեռնումը նման է աուդիո բեռնման: Նախ պետք է ներբեռնեք տեսադարան: (https://processing.org/reference/libraries/video/index.html)

Կոդի օրինակ (10-3):

[cceN_cpp theme = "dawn"] ներմուծում processing.video.*;

Ֆիլմերի շարժում;

void setup () {

չափը (640, 360);

ֆոն (0);

mov = նոր Ֆիլմ (սա, «1.mov»);

}

void movieEvent (Ֆիլմի ֆիլմ) {

mov.read ();

}

դատարկ վիճակահանություն () {

պատկեր (շարժական, 0, 0, 640, 360);

}

void keyPressed () {

եթե (բանալին == 'p') {

mov.play ();

}

if (key == 's') {

mov.stop ();

}

եթե (բանալին == 'դ') {

mov.pause ();

}

} [/cceN_cpp]

Տեսանյութի սքրինշոթ.

Կոդ Բացատրեք.

Առաջին ներդիրը «ներմուծում մշակման. Տեսանյութ.*;» Օգտագործվում է տեսադարան գրադարան բեռնելու համար:

Երկրորդ նախադասությունը ՝ «Movie mov;», օգտագործվում է վիդեո օբյեկտ հայտարարելու համար: Դրա մեջ «Ֆիլմի» գործառույթը նման է PImage- ին:

Ֆունկցիայի կարգավորման դեպքում «mov = new Movie (սա,« 1.mov »);» -ի ազդեցությունն է ստեղծել օբյեկտ և սահմանել դրա ընթերցման ուղին: Վերջին պարամետրը պետք է լրացվի տեսանյութի աղբյուրի հասցեով:

Behine- ի տեղադրում, movieEvent- ը ներկայացնում է վիդեո իրադարձություն: Այն օգտագործվում է տեսանյութի տեղեկատվությունը թարմացնելու և կարդալու համար: «mov.read ()» իրադարձության դեպքում նշանակում է կարդալ:

Բացառությամբ պատկերների ցուցադրման, գործառական պատկերը կարող է նաև տեսանյութեր ցուցադրել: Մենք կարող ենք վիդեո օբյեկտը դիտարկել որպես դինամիկ պատկեր: Առաջին պարամետրը մենք լրացնում ենք տեսանյութի օբյեկտի փոփոխականի անունը: Երկրորդ և երրորդ պարամետրերն են տեսանյութով գծված հորիզոնական և ուղղահայաց կոորդինատները: Չորրորդ և հինգերորդ պարամետրերը որոշում են տեսանյութի ցուցադրման երկարությունը և լայնությունը:

Ֆունկցիա.խաղ () նշանակում է խաղ:. Stop () գործառույթը նշանակում է կանգ առնել, և այն կվերականգնի տեսանյութը: Ֆունկցիա.pause () նշանակում է դադար: Այն կդադարեցնի ընթացիկ խաղը, որը կշարունակվի մինչև.play () գործառույթը չկանչվի:

Քայլ 6: Տեսանյութի արագության վերահսկում

Կոդի օրինակ (10-4):

[cceN_cpp theme = "dawn"] ներմուծում processing.video.*;

Ֆիլմերի շարժում;

void setup () {

չափը (640, 360);

ֆոն (0);

mov = նոր Ֆիլմ (սա ՝ «transit.mov»);

}

void movieEvent (Ֆիլմի ֆիլմ) {

mov.read ();

}

դատարկ վիճակահանություն () {

պատկեր (շարժական, 0, 0, լայնություն, բարձրություն);

float newSpeed = mouseX/(float) լայնություն * 4;

mov.speed (newSpeed);

}

void keyPressed () {

եթե (բանալին == 'p') {

mov.play ();

}

if (key == 's') {

mov.stop ();

}

եթե (բանալին == 'դ') {

mov.pause ();

}

}

[/cceN_cpp]

Կոդ Բացատրեք.

. Speed () գործառույթը կարող է օգտագործվել տեսահոլովակի նվագարկման արագությունը վերահսկելու համար: Երբ պարամետրի արժեքը 1 է, նվագարկման արագությունը նորմալ է: Երբ արժեքը գերազանցում է 1 -ը, ապա արագանում; մինչ այն 1 -ի տակ է, ապա դանդաղեցրեք:

Քանի որ մենք կառուցել ենք newSpeed տեղական փոփոխական և ներմուծել այն setSpeed () ֆունկցիայի մեջ, մկնիկի կոորդինատը ուղղակիորեն կազդի տեսանյութի նվագարկման արագության վրա:

Ինչ վերաբերում է տեսանյութերի մասին ավելի շատ օրինակներին, ապա կարող եք անդրադառնալ Գրադարաններ.

Քայլ 7: Ընդհանուր իրադարձությունների մշակում

Նախկինում մենք ներկայացրել էինք միայն keyPpress () իրադարձությունը: Այն կաշխատեցվի ստեղնաշարը սեղմելուց հետո: Ստորև մենք ձեզ համար կներկայացնենք մշակման այլ սովորական իրադարձություններ:

Վերոնշյալ իրադարձությունների օգտագործումը նման է keyPpress- ին: Նրանք կոդ գրելու հաջորդականություն չունեն: Այլ կերպ ասած, անկախ նրանից, թե որ իրադարձությունն եք տեղադրել գործառույթի կարգավորումից առաջ կամ հետևում, դուք ստանում եք նույն արդյունքը: Կատարման հրամանը կապված է միայն բուն իրադարձության հրահրող վիճակի հետ: Միայն եթե պայմանը բավարարվի, ապա այն կկատարվի: Վերոնշյալ իրադարձությունները բոլորը շատ հեշտ է հասկանալ: Պարզապես պետք է մի փոքր փորձ անել, այնուհետև կարող եք արագ ընկալել դրանց օգտագործումը:

Իրադարձությունների հոսք

Մենք կարող ենք օրինակ օգտագործել ՝ իրադարձությունների կատարման կարգը իմանալու համար:

Կոդի օրինակ (10-5):

[cceN_cpp theme = "լուսաբաց"] անվավեր կարգավորում () {

frameRate (2);

println (1);

}

դատարկ վիճակահանություն () {

println (2);

}

void mousePressed () {

println (3);

}

դատարկ մուկՇարժվեց () {

տպագիր (4);

}

void mouseReleased () {

տպագիր (5);

}

void keyPressed () {

տպագիր (6);

}

դատարկ բանալին Թողարկվեց () {

տպագիր (7);

} [/cceN_cpp]

Կոդ Բացատրեք.

Ֆունկցիայի կարգավորման ժամանակ functionRR () գործառույթը սահմանել է ծրագրի աշխատանքի արագությունը 2 կադր վայրկյանում: Շրջանակի արագության իջեցումը կարող է օգնել մեզ դիտել մխիթարելում թողարկված ելքը այն դեպքում, երբ գործարկվող իրադարձություններն անմիջապես նոր տվյալներով կհետևեն հետևի կողմին:

Փորձեք տեղափոխել մկնիկը, սեղմել մկնիկը, բաց թողնել մկնիկը և դիտել արդյունքի արդյունքը: Printանոթացեք իրադարձության կատարման կարգին println- ի միջոցով:

Այն, ինչ արժե ուշադրություն դարձնել, այն է, որ գծագրման գործառույթները չեն կարող գրվել այլ իրադարձությունների մեջ, բացառությամբ գործառույթի գծագրի, կամ այն չի կարող ցուցադրվել: Եթե մենք ցանկանում ենք վերահսկել գրաֆիկական բաղադրիչների թաքցնելը և ցուցադրումը այնպիսի իրադարձությունների միջոցով, ինչպիսիք են keyPpress- ը, կարող ենք համարել bool փոփոխականի կառուցումը որպես միջին:

Իրադարձությունները կընթանան ըստ հերթականության: Միայն ընթացիկ իրադարձության բոլոր ծածկագրերի ներդրումից հետո այն կիրականացնի հաջորդ իրադարձության դեպքում:

Քայլ 8. Համապարփակ օրինակ-Երաժշտության ստեղնաշար

Նոր իրադարձությունների հետ համատեղ, մենք կարող ենք նոր փոխազդեցություններ ավելացնել մեր ծրագրին: Հաջորդը, ընդամենը մի քանի րոպեի ընթացքում մենք կարող ենք հեշտությամբ անալոգավորել երաժշտական ստեղնաշարը:

Տեսանյութի կայք ՝

Կոդի օրինակ (10-6):

[cceN_cpp theme = "dawn"] ներմուծում processing.sound.*;

SoundFile sound1, sound2, sound3, sound4, sound5;

բուլյան բանալի 1, բանալ 2, բանալ 3, բանալ 4, բանալ 5;

void setup () {

չափը (640, 360);

ֆոն (255);

noStroke ();

sound1 = նոր SoundFile (սա, «do.wav»);

sound2 = նոր SoundFile (սա, «re.wav»);

sound3 = նոր SoundFile (սա, «mi.wav»);

sound4 = նոր SoundFile (սա, «fa.wav»);

sound5 = նոր SoundFile (սա, «so.wav»);

}

դատարկ վիճակահանություն () {

ֆոն (255, 214, 79);

rectMode (CENTER);

բոց w = լայնություն * 0.1;

բոց h = բարձրություն * 0.8;

եթե (բանալի 1) {

լրացնել (255);

} ուրիշ {

լրացնել (238, 145, 117);

}

ուղիղ (լայնություն/6, բարձրություն/2, w, ժ);

եթե (բանալին 2) {

լրացնել (255);

} ուրիշ {

լրացնել (246, 96, 100);

}

ուղիղ (լայնություն/6 * 2, բարձրություն/2, w, ժ);

եթե (բանալին 3) {

լրացնել (255);

} ուրիշ {

լրացնել (214, 86, 113);

}

ուղիղ (լայնություն/6 * 3, բարձրություն/2, w, ժ);

եթե (բանալին 4) {

լրացնել (255);

} ուրիշ {

լրացնել (124, 60, 131);

}

ուղիղ (լայնություն/6 * 4, բարձրություն/2, w, ժ);

եթե (բանալի 5) {

լրացնել (255);

} ուրիշ {

լրացնել (107, 27, 157);

}

ուղիղ (լայնություն/6 * 5, բարձրություն/2, w, ժ);

}

void keyPressed () {

if (key == 'a') {

sound1.play ();

բանալի 1 = ճշմարիտ;

}

if (key == 's') {

sound2.play ();

բանալի 2 = ճշմարիտ;

}

եթե (բանալին == 'դ') {

sound3.play ();

բանալի 3 = ճշմարիտ;

}

if (key == 'f') {

sound4.play ();

key4 = ճշմարիտ;

}

եթե (բանալին == 'g') {

sound5.play ();

key5 = ճշմարիտ;

}

}

դատարկ բանալին Թողարկվեց () {

եթե (բանալին == 'ա') {

բանալի 1 = կեղծ;

}

if (key == 's') {

բանալի 2 = կեղծ;

}

եթե (բանալին == 'դ') {

բանալի 3 = կեղծ;

}

if (key == 'f') {

key4 = կեղծ;

}

եթե (բանալին == 'g') {

key5 = կեղծ;

}

} [/cceN_cpp]

Կոդ Բացատրեք.

Մենք պետք է ստեղծենք բազմաթիվ աուդիո օբյեկտներ `ձայնի հարաբերական տեղեկատվությունը կարդալու համար, որպեսզի տարբեր ստեղներ գործարկելիս հնչեն տարբեր հնչյուններ:

Այստեղ մենք օգտագործում ենք նոր իրադարձության keyReleased (): Այս միջոցառման գործառույթն է վերականգնել ստեղնաշարի գույնը իր սկզբնական գույնին: Բանալին բաց թողնելիս այն կաշխատեցվի:

Գլխում հայտարարված 5 բուլյան արժեքները օգտագործվում են բանալու կարգավիճակը հայտնաբերելու համար:

Քայլ 9. Համապարփակ օրինակ-Երաժշտական ներկապնակ 1

Բացի ստեղնաշարի իրադարձությունից, մկնիկի իրադարձությունը լավ բան է, որ մենք պետք է այն ճկուն օգտագործենք: Ստորև բերված օրինակը մեզ համար երաժշտական ներկապնակ ստեղծելու համար է, որոնց թվում մենք օգտագործել ենք մկնիկի հետ կապված երկու իրադարձություն:

Տեսանյութի կայք ՝

Կոդի օրինակ (10-7):

[cceN_cpp theme = "dawn"] ներմուծում processing.sound.*;

SoundFile sound1, sound2, sound3, sound4, sound5;

բուլյան isDragging;

void setup () {

չափը (640, 360);

ֆոն (255, 214, 79);

noStroke ();

sound1 = նոր SoundFile (սա, «do.wav»);

sound2 = նոր SoundFile (սա, «re.wav»);

sound3 = նոր SoundFile (սա, «mi.wav»);

sound4 = նոր SoundFile (սա, «fa.wav»);

sound5 = նոր SoundFile (սա, «so.wav»);

}

դատարկ վիճակահանություն () {

եթե (isDragging) {

լրացնել (107, 27, 157, 100);

էլիպս (mouseX, mouseY, 16, 16);

}

}

void mouseDragged () {

isDragging = ճշմարիտ;

if (mouseX> 100 && mouseX <105) {

sound1.play ();

}

if (mouseX> 200 && mouseX <205) {

sound2.play ();

}

if (mouseX> 300 && mouseX <305) {

sound3.play ();

}

if (mouseX> 400 && mouseX <405) {

sound4.play ();

}

if (mouseX> 500 && mouseX <505) {

sound5.play ();

}

}

void mouseReleased () {

isDragging = կեղծ;

} [/cceN_cpp]

Կոդ Բացատրեք.

Հուսով ենք, որ միայն երբ սեղմում ենք մկնիկը և քարշ տալիս այն, կարող ենք նկարել նկարներ: Այսպիսով, մենք պետք է կառուցենք բուլյան isDragging փոփոխականը ՝ ընթացիկ կարգավիճակը ստանալու համար:

Մկնիկը քաշելիս, isDragging- ը դառնում է իրական արժեք, որպեսզի Draw- ի գծագրման գործառույթները կատարվեն: Այն հետքեր կթողնի էկրանին: Երբ մկնիկը բաց ենք թողնում, isDragging- ը դառնում է կեղծ արժեք: Այսպիսով, գծագրման գործառույթները ֆունկցիայի գծման մեջ կդադարեցնեն կատարումը:

Մենք նախագծել ենք մի քանի հրահրող պայմաններ մկնիկը քարշ տալու դեպքում: Օրինակ, երբ մկնիկի հորիզոնական կոորդինատը 100 և 105 պիքսելների միջև է, երաժշտությունը ինքնաբերաբար կհնչի: Սա ստիպում է էկրանին ստեղծել մի քանի անտեսանելի լարեր: Միայն եթե մկնիկը անցնում է որոշակի տարածքներով, այն կհանգեցնի հարաբերական երաժշտության:

Քայլ 10: Համապարփակ օրինակ-Երաժշտական ներկապնակ 2 (թարմացված տարբերակ)

Վերոնշյալ օրինակի ազդեցությունն արդեն բավական լավ է: Բայց եթե ուշադիր նայենք, շատ խնդիրներ կգտնենք: Օրինակ, երբ մկնիկը շատ արագ է շարժվում, ամեն անգամ շարժվելիս կլոր կետ է թողնում էկրանին: Դա համահունչ ուղիղ գիծ չէ: Մինչդեռ դա նաև որոշակի երաժշտական արտահոսք է առաջացնում: Մինչ մկնիկը շատ դանդաղ է շարժվում ՝ անցնելով այն դիրքով, երբ հորիզոնական կոորդինատը 100 -ի և 105 -ի միջև է, այն շատ կարճ ժամանակում մի քանի անգամ երաժշտություն կհեռարձակի, ինչը ձեզ խրված լինելու զգացում է տալիս: Այս բոլոր խնդիրները մենք կարող ենք լուծել ստորև բերված օրինակի միջոցով:

Տեսանյութերը կարող եք դիտել ստորև բերված հղումով ՝

v.qq.com/x/page/w03226o4y4l.html

Կոդի օրինակ (10-8):

[cceN_cpp theme = "dawn"] ներմուծում processing.sound.*;

SoundFile sound1, sound2, sound3, sound4, sound5;

բուլյան isDragging;

void setup () {

չափը (640, 360);

ֆոն (255, 214, 79);

noStroke ();

sound1 = նոր SoundFile (սա, «do.wav»);

sound2 = նոր SoundFile (սա, «re.wav»);

sound3 = նոր SoundFile (սա, «mi.wav»);

sound4 = նոր SoundFile (սա, «fa.wav»);

sound5 = նոր SoundFile (սա, «so.wav»);

}

դատարկ վիճակահանություն () {

եթե (isDragging) {

կաթված (107, 27, 157, 100);

կաթված Քաշ (10);

տող (mouseX, mouseY, pmouseX, pmouseY);

}

}

void mouseDragged () {

isDragging = ճշմարիտ;

եթե ((mouseX - 100) * (pmouseX - 100) <0) {

sound1.play ();

}

եթե ((mouseX - 200) * (pmouseX - 200) <0) {

sound2.play ();

}

եթե ((mouseX - 300) * (pmouseX - 300) <0) {

sound3.play ();

}

եթե ((mouseX - 400) * (pmouseX - 400) <0) {

sound4.play ();

}

եթե ((mouseX - 500) * (pmouseX - 500) <0) {

sound5.play ();

}

}

void mouseReleased () {

isDragging = կեղծ;

} [/cceN_cpp]

Կոդ Բացատրեք.

Այստեղ մենք օգտագործել ենք երկու փոփոխական pmouseX և pmouseY, որոնք տեղակայված են բուն Processing համակարգում: Նրանք նման են mouseX- ին և mouseY- ին, բայց այն, ինչ նրանք ստացել են, վերջին շրջանակի մկնիկի կոորդինատներն են:

Ֆունկցիայի գծագրության մեջ մենք օգտագործել ենք գործառույթի գիծը () ՝ սկզբնական էլիպսը () փոխարինելու համար: Սա ուղղակիորեն կապում է վերջին շրջանակի կոորդինատը ընթացիկ շրջանակի կոորդինատին: Այսպիսով, մենք կարող ենք գծել համահունչ ուղիղ գծեր կամ կորեր:

MouseDragged- ի դեպքում մենք նախագծել ենք գործարկման նոր պայման:Դատելով ՝ արդյո՞ք վերջին շրջանակի և ընթացիկ շրջանակի կոորդինատը նույն կողմում են ՝ իմանալու համար, թե արդյոք որոշակի կոորդինատը հատվում է: Այս պայմանը վերցրեք որպես օրինակ. «If ((mouseX - 100) * (pmouseX - 100) <0)»: Դրա թվում ՝ «mouseX - 100» - ի արդյունքում ստացված դրական և բացասական արժեքներից մենք կարող ենք իմանալ, թե արդյոք mouseX- ը հորիզոնական կուդինատ 100 -ից աջ կամ ձախ է: Նմանապես «pmouseX -100» - ի նման: Հետևաբար, երբ առջևի և հետևի երկու կետերը նույն կողմում չեն, դրականը բազմապատկում է բացասականը, այն կստանա նոր բացասական թիվ: Այսպիսով կատարման պայմանը բավարարված է:

Վերոնշյալը պարզեցված արտահայտություն է, որը խելամտորեն օգտագործել է որոշակի մաթեմատիկական ալգորիթմ. Երկու բացասական բազմապատկելը կստեղծի դրական: Կարող եք նաև այն բաժանել երկու իրավիճակի ՝ առանձին քննարկելու համար: Այնուամենայնիվ, դատողության պայմաններ գրելը շատ ավելի բարդ է: «Եթե ((mouseX = 100) || (mouseX> 100 && pmouseX <= 100))» դատավճիռը համարժեք է աղբյուրի կոդի որոշիչ պայմաններին:

Քայլ 11: Աուդիո և վիդեո կառավարման մասին հարաբերական գործառույթներ

Վերոնշյալ գործառույթները բավարար են ընդհանուր օգտագործման սցենարների համար: Եթե ցանկանում եք այն խորը փորել, այստեղ ես ձեզ համար հավաքել եմ աուդիո և վիդեոներին վերաբերող որոշ ընդհանուր գործառույթներ: Դուք կարող եք ուսումնասիրել դրա օգտագործումը ՝ ըստ ձեր սեփական պահանջների:

Լրացուցիչ ներդրման համար կարող եք վկայակոչել պաշտոնական կայքի փաստաթղթերը:

Աուդիո (https://processing.org/reference/libraries/sound/index.html)

Տեսանյութ (https://processing.org/reference/libraries/video/index.html)

Այս հոդվածը գալիս է դիզայներ Վենզիից:

Քայլ 12: Հարաբերական ընթերցումներ

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար `նախնական հպման մշակում

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար. Ստեղծեք ձեր առաջին մշակման ծրագիրը

Designրագրավորման հետաքրքիր ուղեցույց դիզայների համար-Գործարկեք ձեր պատկերը (մաս առաջին)

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար-Գործարկեք ձեր պատկերը (մաս երկրորդ)

Designրագրավորման հետաքրքիր ուղեցույց դիզայներների համար- Processրագրի գործընթացի վերահսկում- օղակի հայտարարություն

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար-Processրագրի գործընթացի վերահսկում-վիճակի մասին հայտարարություն (մաս առաջին)

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար-Processրագրի գործընթացի վերահսկում-վիճակի մասին հայտարարություն (մաս երկրորդ)

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար-Պատվերով գործառույթներ և ֆրակտալ հետընթաց

Programրագրավորման հետաքրքիր ուղեցույց դիզայների համար-Պատվերով գործառույթներ և ֆրակտալ հետընթաց

Դիզայների համար մշակման հետաքրքիր ծրագրավորման ուղեցույց-Գույնի վերահսկում

Քայլ 13: Աղբյուր

Այս հոդվածը ՝ https://www.elecfreaks.com/11592.html կայքից է

Եթե ունեք հարցեր, կարող եք կապվել : [email protected].

Խորհուրդ ենք տալիս: