İçindekiler:
- 1. Adım: Resmi Oku
- 2. Adım: Görüntüyle İlgili İşlevler
- 3. Adım: Müzik Yükleme, Çalma ve Durdurma
- Adım 4: Müzik Hız Kontrolü
- Adım 5: Video Oynat ve Durdur
- Adım 6: Video Hız Kontrolü
- 7. Adım: Ortak Olayları İşleme
- 8. Adım: Kapsamlı Örnek--Müzik Klavyesi
- 9. Adım: Kapsamlı Örnek -- Müzik Paleti 1
- Adım 10: Kapsamlı Örnek--Müzik Paleti 2(Güncellenmiş Versiyon)
- Adım 11: Ses ve Video Kontrolüyle İlgili Göreli İşlevler
- Adım 12: Göreli Okumalar:
- Adım 13: Kaynak
Video: Tasarımcı için İlginç İşleme Programlama Rehberi--Medya Yükleme ve Etkinlik: 13 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
İşleme, aralarında çok yaygın olarak kullanılan üç türün bulunduğu çok sayıda harici veri yüklenebilir. Bunlar ayrı ayrı görüntü, ses ve videodur.
Bu bölümde olaylarla birleştirerek ses ve video yüklemeyi detaylı olarak anlatacağız. Sonunda kendi müzik klavyenizi veya müzik paletinizi oluşturabilirsiniz.
1. Adım: Resmi Oku
Başlamadan önce, resim yükleme yöntemine tekrar bakalım.
2. Adım: Görüntüyle İlgili İşlevler
Bu fonksiyonları kullanmadan önce PImage ile bir imaj nesnesi oluşturmamız gerekiyor. Daha sonra bu fonksiyonları her türlü görüntü özelliklerini tanımlamak için kullanabiliriz.
Programınızı çalıştırmadan önce görüntü kaynaklarınızı veri dosyasına kaydetmeyi unutmayınız.
3. Adım: Müzik Yükleme, Çalma ve Durdurma
Aşağıda, size müziğin çağrılmasını resmen tanıtmaya başlıyoruz. Görüntü yüklemeye çok benzer şekilde, başlangıçta bir ses nesnesi bildirmeniz gerekir. Gerçek gramer için aşağıdaki örneğe başvurabilirsiniz.
Kod Örneği (10-1):
[cceN_cpp theme="şafak"] işleme işleme.sound.*;
SoundFile sesi;
geçersiz kurulum() {
boyut(640, 360);
arka plan(255);
ses = new SoundFile(bu, "1.mp3");
}
geçersiz beraberlik() {
}
void keyPressed() {
//Sesi Oynat
if (anahtar == 'p') {
ses.play();
}
// Sesi durdur
if (anahtar == 's') {
ses.durdur();
}
} [/cceN_cpp]
Hazırlık:
İşlemenin kendisi herhangi bir ses kitaplığı taşımaz. Kendiniz indirmeniz gerekiyor. Bu yüzden kodunuzu yazmadan önce aşağıdaki hazırlıkları yapmanız iyi olur.
İşleme'ye kitaplık ekleyin. İşte ortak uygulama. "Araç"--"Araç Ekle" için menü çubuğundan seçim yapın ve ardından "Kütüphaneler"e geçin. Doğrudan indirip kurabilmeniz için kitaplığın anahtar sözcüklerini arama sütununa girin.
Ancak bu işlevi kendi ülkemizde (Çin'de) kullanırsak, doğrudan web'e bağlayarak indiremeyiz. VPN'i başlatmamız gerekiyor. Başlasak bile, istikrarsız koşullar olacak. Bu yüzden birkaç kez denemek için sabırlı olmalısınız. Bu, yüklemenin en uygun yöntemidir. Kuramazsanız, resmi web sitesinden manuel olarak indirmeniz gerekir. (https://processing.org/reference/libraries/) Manuel kurulum yöntemi çok karmaşık olduğu için diğer bölümde daha ayrıntılı tartışacağız.
Kod Açıklama:
Hazırlık tamamlandıktan sonra ses kitaplığı düzgün çalışabilir. Yukarıdaki kodu yazın, ÇALIŞTIR'a tıklayın, ardından çalışacaktır. Müziği çalmak için "P" tuşuna, müziği durdurmak için "S" tuşuna basın.
Eğer programa alışmışsa önce onu yüklememiz gerekiyor. Başta "importprocess.sound.*" cümlesini eklememiz gerekiyor. "ithalat", kelimenin tam anlamıyla yükleme anlamına gelen anahtar kelimedir. Kitaplık adını "içe aktar"ın arkasına ekleyin, ardından kitaplığı yükleyecektir. Kuyruk genellikle bir "*" işaretini takip eder, bu nedenle kitaplıkla ilgili tüm sınıfları tek tek manuel olarak eklemek zorunda kalmadan programa yükler.
İkinci cümlede " SoundFile sound; " bir ses nesnesi bildirmiştir. SoundFile, PImage'a benzer.
İşlev kurulumunda, " sound = new SoundFile(this, "1.mp3"); ", bir nesne oluşturmak ve okuma yolunu tanımlamak için kullanılır. Burada aslında yeni bir konsept Class kullanmaya başladık. Şu anda bunu derinlemesine tartışmıyoruz. Sadece sabit bir yazma yöntemi olduğunu ve son parametrenin müzik kaynağının adresini doldurmak için olduğunu bilmemiz gerekiyor.
keyPressed() olayları arasında " sound.play() " ve " sound.stop() " nispeten play ve stop etkisi olarak çalışır. "." ortadaki, ses nesnelerine ait çalan ve durduran bir üye işlevini gösterir. Üye fonksiyonunu, nesnenin içerdiği fonksiyon olarak kabul edebiliriz. Önceden tanımlanmış olan bu nesneye aittir. Daha sonra, birden fazla ses nesnesini çalmamız gerektiğinde, ilgili değişken adının arkasına yalnızca ".play()" eklememiz gerekir.
Ses kaynakları aynı eskiz dosyası kataloğu altında (pde eki ile) veri dosyasında saklanacaktır. Hiçbiri yoksa, manuel olarak bir tane oluşturabilirsiniz.
Fonksiyon çizimi yazmayı unutmayınız. Herhangi bir grafik çizmemiş olsanız da, başarılı bir şekilde müzik çalmanız gerekiyor.
Yukarıdaki prosedür oldukça karmaşık görünüyor, ancak yalnızca birkaç kod cümlesi eklemeniz gerekiyor, ardından oynatma işlevini gerçekleştirebilirsiniz. Bu çok uygun.
İşleme, mp3, wav, ogg, vb. gibi yaygın ses biçimlerini destekler.
Adım 4: Müzik Hız Kontrolü
Aşağıdaki örnekler çok ilginç olmaya başlayacak. İşleme, müzik çalma hızını kontrol edebilen bazı işlevler sağlamıştır. Aynı zamanda, müzik çalma hızı ile tonlar değişecektir. Kontrol etmek için fareyi kullandığımızda, çok psychedelic etki yaratacaktır.
Video web sitesi:
Kod Örneği (10-2):
[cceN_cpp theme="şafak"] işleme işleme.sound.*;
SoundFile sesi;
geçersiz kurulum() {
boyut(640, 360);
arka plan(255);
ses = new SoundFile(bu, "1.mp3");
}
geçersiz beraberlik() {
kayan hız = mouseX/(kayan)genişlik * 3;
ses.oran(hız);
kayan nokta vol = fareY/(kayan)yükseklik * 4;
ses.amp(hacim);
}
void keyPressed() {
//Sesi Oynat
if (anahtar == 'p') {
ses.play();
}
// Sesi durdur
if (anahtar == 's') {
ses.durdur();
}
} [/cceN_cpp]
Kod Açıklama:
.rate() işlevi, ses çalma hızını kontrol eder. Parantez içindeki değer, çalma hızının hızlı ve yavaşlığını belirler. Değer 1 olduğunda, oynatma hızı normaldir. 1'in ötesine geçtiğinde, hızlanın; 1'in altındayken, sonra yavaşlayın.
İşlev.amp(), ses düzeyini kontrol eder. Parantez içindeki değer hacim değerini belirler. 1 olduğunda, hacim değeri normaldir. 1'in üzerinde olduğunda, ses seviyesini artırın; 1'in altındayken, ses seviyesini azaltın.
Burada, yüklenecek parametreler olarak hız ve vol olmak üzere iki yerel değişken oluşturduk. Bu nedenle, farenin yatay koordinatı müzik tonunu değiştirecek ve dikey koordinat müzik sesini değiştirecektir.
Adım 5: Video Oynat ve Durdur
İşleme'de video yükleme, ses yüklemeye benzer. Önce video kitaplığını indirmeniz gerekir. (https://processing.org/reference/libraries/video/index.html)
Kod Örneği (10-3):
[cceN_cpp theme="şafak"] içe aktarma işleme.video.*;
Film hareketi;
geçersiz kurulum() {
boyut(640, 360);
arkaplan(0);
mov = yeni Film(bu, "1.mov");
}
void movieEvent(Film filmi) {
mov.read();
}
geçersiz beraberlik() {
resim(mov, 0, 0, 640, 360);
}
void keyPressed() {
if (anahtar == 'p') {
mov.play();
}
if (anahtar == 's') {
hareket.durdur();
}
if (anahtar == 'd') {
hareket.duraklat();
}
} [/cceN_cpp]
Video Ekran Görüntüsü:
Kod Açıklama:
İlk cümle " importprocess.video.*; " video kitaplığını yüklemek için kullanılır.
İkinci cümle " Movie mov; " video nesnesini bildirmek için kullanılır. Bunların arasında " Movie " işlevi PImage'a benzer.
İşlev kurulumunda, " mov = new Movie(this, "1.mov"); " öğesinin etkisi, nesne oluşturmak ve okuma yolunu tanımlamaktır. Son parametre video kaynağının adresi ile doldurulacaktır.
Kurulumun arkasında, movieEvent video olayını temsil eder. Video bilgilerini güncellemek ve okumak için kullanılır. "mov.read()" olayda okuma anlamına gelir.
Görüntülerin görüntülenmesi dışında, işlev görüntüsü de videoyu görüntüleyebilir. Video nesnesini dinamik bir resim olarak kabul edebiliriz. İlk parametre, video nesnesinin değişken adını dolduruyoruz. İkinci ve üçüncü parametreler, video tarafından çizilen yatay ve dikey koordinatlardır. Dördüncü ve beşinci parametreler video gösteriminin uzunluğuna ve genişliğine karar verir.
.play() işlevi, oynatma anlamına gelir..stop() işlevi, durdurmak anlamına gelir ve videoyu sıfırlar..pause() işlevi, duraklatma anlamına gelir..play() işlevi çağrılana kadar devam edecek olan mevcut oynatmayı kesecektir.
Adım 6: Video Hız Kontrolü
Kod Örneği (10-4):
[cceN_cpp theme="şafak"] içe aktarma işleme.video.*;
Film hareketi;
geçersiz kurulum() {
boyut(640, 360);
arkaplan(0);
mov = yeni Film(bu, "transit.mov");
}
void movieEvent(Film filmi) {
mov.read();
}
geçersiz beraberlik() {
image(mov, 0, 0, genişlik, yükseklik);
float newSpeed = mouseX/(float)width * 4;
mov.speed(newSpeed);
}
void keyPressed() {
if (anahtar == 'p') {
mov.play();
}
if (anahtar == 's') {
hareket.durdur();
}
if (anahtar == 'd') {
hareket.duraklat();
}
}
[/cceN_cpp]
Kod Açıklaması:
.speed() işlevi, video oynatma hızını kontrol etmek için kullanılabilir. Parametre değeri 1 olduğunda, oynatma hızı normaldir. Değer 1'in üzerine çıktığında hızlanır; 1'in altındayken, sonra yavaşlayın.
NewSpeed yerel değişkenini oluşturduğumuz ve onu setSpeed() işlevine aktardığımız için, farenin koordinatı video oynatma hızını doğrudan etkileyecektir.
Videoyla ilgili daha fazla örnek için, vaka kitaplığındaki Kitaplıklar - Video'ya başvurabilirsiniz.
7. Adım: Ortak Olayları İşleme
Daha önce sadece keyPressed() olayını tanıtmıştık. Klavyeye basıldıktan sonra tetiklenecektir. Aşağıda, sizin için İşlemedeki diğer yaygın olayları tanıtacağız.
Yukarıdaki olayların kullanımları keyPressed'e benzer. Kod yazımında sıraları yoktur. Başka bir deyişle, fonksiyon kurulumunun önüne veya arkasına hangi olayı yerleştirdiğiniz önemli değil, aynı sonucu alırsınız. Yürütme sırası yalnızca olayın kendisinin tetikleme koşuluyla ilgilidir. Yalnızca koşul karşılanırsa, yürütülür. Yukarıdaki olayların hepsinin anlaşılması çok kolaydır. Sadece küçük bir deney yapmanız gerekiyor, o zaman kullanımlarını çabucak kavrayabilirsiniz.
Etkinlik Akışı
Olayların yürütme sırasını bilmek için bir örnek kullanabiliriz.
Kod Örneği(10-5):
[cceN_cpp theme="şafak"] geçersiz kurulum() {
çerçeveHızı(2);
println(1);
}
geçersiz beraberlik() {
println(2);
}
geçersiz mousePressed() {
println(3);
}
void mouseMoved() {
println(4);
}
void mouseReleased() {
println(5);
}
void keyPressed() {
println(6);
}
void keyReleased() {
println(7);
} [/cceN_cpp]
Kod Açıklama:
İşlev kurulumunda, işlev frameRate(), programın çalışma hızını saniyede 2 kare olacak şekilde ayarlamıştır. Kare hızını düşürmek, tetiklenen olayların yeni veriler tarafından hemen arkaya fırçalanması durumunda konsoldaki çıktıyı gözlemlememize yardımcı olabilir.
Farenizi hareket ettirmeye çalışın, fareyi tıklayın, fareyi bırakın ve çıktı sonucunu gözlemleyin. println aracılığıyla olay yürütme sırasını öğrenin.
Dikkat edilmesi gereken nokta, çizim fonksiyonlarının fonksiyon çizimi dışında diğer olaylara yazılamaması veya görüntülenememesidir. KeyPressed gibi olaylar aracılığıyla grafik bileşenlerinin gizlenmesini ve görüntülenmesini kontrol etmek istiyorsak, orta olarak bool değişkeni oluşturmayı düşünebiliriz.
Olaylar sırayla yürütülecektir. Yalnızca mevcut olaydaki tüm kodlar uygulandıktan sonra, sonraki olayda kodu çalıştırır.
8. Adım: Kapsamlı Örnek--Müzik Klavyesi
Yeni kavranan olaylarla birleşerek programımıza yeni etkileşimler ekleyebiliriz. Ardından, sadece birkaç dakika ile bir müzik klavyesini kolayca analog hale getirebiliriz.
Video web sitesi:
Kod Örneği (10-6):
[cceN_cpp theme="şafak"] işleme işleme.sound.*;
SoundFile ses1, ses2, ses3, ses4, ses5;
boolean key1, key2, key3, key4, key5;
geçersiz kurulum() {
boyut(640, 360);
arka plan(255);
noStroke();
sound1 = new SoundFile(bu, "do.wav");
sound2 = new SoundFile(bu, "re.wav");
sound3 = new SoundFile(bu, "mi.wav");
sound4 = new SoundFile(bu, "fa.wav");
sound5 = new SoundFile(bu, "so.wav");
}
geçersiz beraberlik() {
arka plan(255, 214, 79);
rectMode(CENTER);
kayan nokta w = genişlik * 0.1;
kayan nokta h = yükseklik * 0.8;
if (anahtar1) {
doldur(255);
} Başka {
doldur(238, 145, 117);
}
rect(genişlik/6, yükseklik/2, w, y);
eğer (anahtar2) {
doldur(255);
} Başka {
doldur(246, 96, 100);
}
rect(genişlik/6 * 2, yükseklik/2, w, y);
eğer (anahtar3) {
doldur(255);
} Başka {
doldur(214, 86, 113);
}
rect(genişlik/6 * 3, yükseklik/2, w, y);
eğer (anahtar4) {
doldur(255);
} Başka {
doldur(124, 60, 131);
}
rect(genişlik/6 * 4, yükseklik/2, w, y);
eğer (anahtar5) {
doldur(255);
} Başka {
doldur(107, 27, 157);
}
rect(genişlik/6 * 5, yükseklik/2, w, y);
}
void keyPressed() {
if (anahtar == 'a') {
ses1.play();
key1 = doğru;
}
if (anahtar == 's') {
sound2.play();
key2 = doğru;
}
if (anahtar == 'd') {
sound3.play();
anahtar3 = doğru;
}
if (anahtar == 'f') {
sound4.play();
key4 = doğru;
}
if (anahtar == 'g') {
sound5.play();
key5 = doğru;
}
}
void keyReleased() {
if (anahtar == 'a') {
key1 = yanlış;
}
if (anahtar == 's') {
key2 = yanlış;
}
if (anahtar == 'd') {
key3 = yanlış;
}
if (anahtar == 'f') {
key4 = yanlış;
}
if (anahtar == 'g') {
key5 = yanlış;
}
} [/cceN_cpp]
Kod Açıklama:
Farklı tuşlar tetiklendiğinde farklı sesler çalmak için ilgili ses bilgilerini okumak için birden fazla ses nesnesi oluşturmamız gerekiyor.
Burada yeni bir olay keyReleased() kullanıyoruz. Bu olayın işlevi, klavye rengini orijinal rengine geri yüklemektir. Anahtar bırakıldığında, tetiklenecektir.
Head'de belirtilen 5 boole değeri, anahtarın durumunu tespit etmek için kullanılır.
9. Adım: Kapsamlı Örnek -- Müzik Paleti 1
Klavye olayının yanı sıra fare olayı da iyi bir şey, esnek bir şekilde kullanmamız gerekiyor. Aşağıdaki örnek, aralarında fare ile ilgili iki olayı kullandığımız bir müzik paleti oluşturmamız içindir.
Video web sitesi:
Kod Örneği(10-7):
[cceN_cpp theme="şafak"] işleme işleme.sound.*;
SoundFile ses1, ses2, ses3, ses4, ses5;
boolean Sürükleniyor;
geçersiz kurulum() {
boyut(640, 360);
arka plan(255, 214, 79);
noStroke();
sound1 = new SoundFile(bu, "do.wav");
sound2 = new SoundFile(bu, "re.wav");
sound3 = new SoundFile(bu, "mi.wav");
sound4 = new SoundFile(bu, "fa.wav");
sound5 = new SoundFile(bu, "so.wav");
}
geçersiz beraberlik() {
if (isDragging) {
doldur(107, 27, 157, 100);
elips(mouseX, mouseY, 16, 16);
}
}
void mouseDragged() {
isDragging = true;
if (mouseX > 100 && mouseX <105) {
ses1.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 = yanlış;
} [/cceN_cpp]
Kod Açıklama:
Sadece fareye basıp sürüklediğimizde resim çizebileceğimizi umuyoruz. Bu nedenle, mevcut durumu elde etmek için bir boolean değişkeni isDragging oluşturmamız gerekiyor.
Fareyi sürüklerken, isDragging gerçek değer olur, böylece Draw içindeki çizim fonksiyonları yürütülür. Ekranda iz bırakacaktır. Fareyi bıraktığımızda isDragging false değeri oluyor. Yani fonksiyon çizimindeki çizim fonksiyonları yürütmeyi durduracaktır.
Mouse sürükleme olayında birkaç tetikleme koşulu tasarladık. Örneğin, farenin yatay koordinatı 100 ile 105 piksel arasında olduğunda, müzik otomatik olarak çalınacaktır. Bu, ekranın birkaç görünmez dize oluşturmasını sağlar. Sadece fare belirli alanlardan geçerse, ilgili müziği tetikleyecektir.
Adım 10: Kapsamlı Örnek--Müzik Paleti 2(Güncellenmiş Versiyon)
Yukarıdaki örneğin etkisi zaten yeterince iyi. Ama dikkatlice izlersek, birçok sorun bulacağız. Örneğin, fare çok hızlı hareket ettiğinde, her hareketinde ekranda yuvarlak bir nokta bırakacaktır. Bu tutarlı bir düz çizgi değildir. Bu arada, bazı müzik sızıntılarına da neden olur. Mouse çok yavaş hareket ettiğinde, yatay koordinat 100 ile 105 arasında olduğu konumdan geçerken, çok kısa bir süre içerisinde birden çok kez müzik yayını yapacak ve bu da size sıkışmışlık hissi verecektir. Tüm bu sorunları aşağıdaki örnek üzerinden çözebiliriz.
Videoları aşağıdaki linkten izleyebilirsiniz:
v.qq.com/x/page/w03226o4y4l.html
Kod Örneği(10-8):
[cceN_cpp theme="şafak"] işleme işleme.sound.*;
SoundFile ses1, ses2, ses3, ses4, ses5;
boolean Sürükleniyor;
geçersiz kurulum() {
boyut(640, 360);
arka plan(255, 214, 79);
noStroke();
sound1 = new SoundFile(bu, "do.wav");
sound2 = new SoundFile(bu, "re.wav");
sound3 = new SoundFile(bu, "mi.wav");
sound4 = new SoundFile(bu, "fa.wav");
sound5 = new SoundFile(bu, "so.wav");
}
geçersiz beraberlik() {
if (isDragging) {
vuruş(107, 27, 157, 100);
vuruş Ağırlığı(10);
line(mouseX, mouseY, pmouseX, pmouseY);
}
}
void mouseDragged() {
isDragging = true;
if ((mouseX - 100) * (pmouseX - 100) < 0) {
ses1.play();
}
if ((mouseX - 200) * (pmouseX - 200) < 0) {
sound2.play();
}
if ((mouseX - 300) * (pmouseX - 300) < 0) {
sound3.play();
}
if ((mouseX - 400) * (pmouseX - 400) < 0) {
sound4.play();
}
if ((mouseX - 500) * (pmouseX - 500) < 0) {
sound5.play();
}
}
void mouseReleased() {
isDragging = yanlış;
} [/cceN_cpp]
Kod Açıklaması:
Burada, İşleme sisteminin kendisinde taşınan iki değişken pmouseX ve pmouseY kullandık. MouseX ve mouseY'ye benzerler ancak elde ettikleri son karedeki farenin koordinatıdır.
Fonksiyon çiziminde, orijinal ellipse() fonksiyonunu değiştirmek için line() fonksiyonunu kullandık. Bu, son çerçevenin koordinatını doğrudan geçerli çerçevenin koordinatıyla bağlantılı hale getirir. Böylece tutarlı düz çizgiler veya eğriler çizebiliriz.
MouseDragged durumunda, yeni bir tetikleme koşulu tasarladık. Belirli bir koordinatın geçilip geçilmediğini bilmek için son karenin koordinatının ve mevcut karenin aynı tarafta olup olmadığına karar vererek. Bu koşulu örnek alın: " if ((mouseX - 100) * (pmouseX - 100) < 0)". Bunların arasında, "mouseX - 100"den elde edilen pozitif ve negatif değerden, mouseX'in yatay koordinat 100'ün sağında mı yoksa solunda mı olduğunu bilebiliriz. "pmouseX - 100"e benzer şekilde. Bu nedenle, ön ve arkadaki iki nokta aynı tarafta olmadığında, pozitif bir negatifi çarparsa, yeni bir negatif sayı alır. Böylece yürütme koşulu sağlanır.
Yukarıdaki, belirli bir matematiksel algoritmayı akıllıca kullanan basitleştirilmiş bir ifadedir - İki negatif çarpı bir pozitif yaratacaktır. Ayrı ayrı tartışmak için iki duruma da bölebilirsiniz. Ancak, yargı koşullarını yazmak çok daha karmaşıktır. "if ((mouseX = 100) || (mouseX > 100 && pmouseX <= 100))" yargı koşulları, kaynak kodunun belirleyici koşullarına eşdeğerdir.
Adım 11: Ses ve Video Kontrolüyle İlgili Göreli İşlevler
Yukarıda belirtilen fonksiyonlar genel kullanım senaryoları için yeterlidir. Derinlemesine kazmak istiyorsanız, burada sizin için ses ve video ile ilgili bazı ortak işlevleri topladım. Kullanımlarını kendi gereksinimlerinize göre keşfedebilirsiniz.
Daha fazla tanıtım için resmi web sitesindeki belgelere başvurabilirsiniz.
Ses (https://processing.org/reference/libraries/sound/index.html)
Video (https://processing.org/reference/libraries/video/index.html)
Bu makale tasarımcı Wenzy'den geliyor.
Adım 12: Göreli Okumalar:
Tasarımcı için İlginç Programlama Rehberi -- İlk Dokunuşu İşleme
Tasarımcılar için İlginç Programlama Rehberi – İlk İşleme Programınızı Oluşturun
Tasarımcılar için İlginç Programlama Rehberi--Resminizi Çalıştırın(Birinci Bölüm)
Tasarımcılar için İlginç Programlama Rehberi--Resminizi Çalıştırın(İkinci Kısım)
Tasarımcı-Program Süreç Kontrolü için İlginç Programlama Rehberi- Döngü Bildirimi
Tasarımcı için İlginç Programlama Rehberi--Program Süreç Kontrolü--Koşul Beyanı (Birinci Kısım)
Tasarımcı için İlginç Programlama Rehberi--Program Proses Kontrolü--Koşul Beyanı (İkinci Kısım)
Tasarımcı için İlginç Programlama Rehberi--Özel Fonksiyonlar ve Fraktal Özyineleme
Tasarımcı için İlginç Programlama Rehberi--Özel Fonksiyonlar ve Fraktal Özyineleme
Tasarımcı için İlginç İşleme Programlama Rehberi - Renk Kontrolü
Adım 13: Kaynak
Bu makale şu adresten alınmıştır:
Herhangi bir sorunuz varsa, [email protected] ile iletişime geçebilirsiniz.