Tutorial menggunakan Kanvas dalam HTML5 digabungkan dengan formula untuk melukis kemahiran tutorial zarah motion_html5

WBOY
Lepaskan: 2016-05-16 15:46:38
asal
1802 orang telah melayarinya

Baru-baru ini, saya ingin membuat halaman web dan meletakkan beberapa DEMO yang saya buat semasa proses pembelajaran HTML5 untuk membuat koleksi Walau bagaimanapun, adalah terlalu hodoh untuk hanya membuat halaman web dan mengatur semua DEMO oleh seorang. Saya hanya berfikir, kerana saya telah belajar kanvas, mari bermain-main dengan penyemak imbas dan membuat animasi pembukaan kecil.

Setelah berfikir tentang kesan animasi pembukaan untuk seketika, saya memutuskan untuk menggunakan zarah kerana saya fikir zarah lebih menyeronokkan. Saya masih ingat bahawa catatan blog teknikal pertama yang saya tulis adalah mengenai pembahagian teks dan gambar: Membahagikan teks dan gambar Pada masa itu, saya hanya melakukan gerakan linear, dan menambah sedikit kesan 3D. Formula senaman adalah mudah. Jadi saya hanya mahu menjadikan animasi pembukaan ini lebih dinamik.

Pergi ke DEMO dahulu: http://2.axescanvas.sinaapp.com/demoHome/index.html

Adakah kesannya lebih dinamik daripada gerakan linear? Dan ia sangat mudah, jangan lupa tajuk catatan blog ini, sedikit formula, menyeronokkan. Untuk mencapai kesan sedemikian, apa yang kita perlukan ialah sekolah menengah rendah kita. . Atau pengetahuan fizik di sekolah menengah, formula gerakan dipercepat dan gerakan nyahpecutan. Jadi ia benar-benar formula penurunan kecil. Poster asal suka bermain-main dengan beberapa perkara yang menarik Walaupun dia mungkin tidak menggunakannya di tempat kerja, keseronokan itu benar-benar menarik. Selain itu, melakukan ini juga boleh mengukuhkan kemahiran berfikir pengaturcaraan anda.

Tanpa berlengah lagi, mari kita ke topik. Biar saya terangkan secara ringkas prinsipnya~~~

Kod teras pergerakan zarah hanyalah ini:

Kod XML/HTMLSalin kandungan ke papan keratan
  1. kemas kini:fungsi(masa){   
  2.             ini.x  = ini.vx*masa;   
  3.             this.y  = this.vy*time;   
  4.     
  5.             jika(!this.globleDown&&this.y>0){   
  6.                 var yc = ini.mainan - ini.y;   
  7.                 var xc = ini.toks - ini.x;   
  8.     
  9.                 ini.jl = Matematik.sqrt(xc*xc yc*yc);   
  10.     
  11.                 var za = 20;   
  12.     
  13.                 var ax = za*(xc/this.jl),   >
  14.                     ay = za*(yc/this.jl),                       
  15. vx = (ini.vx ax*masa)*0.97,                        
  16. vy = (this.vy ay*masa)*0.97;        
  17.                 
  18. ini.vx = vx;                    
  19. ini.vy = vy;        
  20.             }lain {   
  21.                 var 
  22. graviti = 9.8;                    var 
  23. vy = ini.vy gravity*masa;        
  24.                  jika(ini.y
  25. >kanvas.tinggi){                        
  26. vy = -vy*0.7;                    }
  27.  ini.vy = vy
  28.                                                                 
  29. },
Zarah mempunyai dua keadaan, satu jatuh bebas, dan satu lagi berada di bawah sedutan. Apatah lagi jatuh bebas. Sebelum bercakap tentang sedutan, mari siarkan sifat zarah:



Kod JavaScript
Salin kandungan ke papan keratan
  1. var Titik = fungsi(x,y,vx,vy,tox,mainan,warna){
  2.  
  3. ini.x=x; 
  4. ini.y=y;
  5.  
  6. ini.vx=vx; 
  7.  
  8. ini.vy=vy; 
  9. ini.nextox = tox;
  10. ini
  11. .nextoy = mainan;  ini
  12. .warna = warna;
  13. ini.kelihatan =
  14. benar
  15. ini.globleDown =
  16. salah
  17. ini.setEnd(toks, mainan);
  18. }
  19. setTamat:
  20. fungsi
  21. (toks, mainan){
  22.                                                                            
  23.                                                                                                                                                                                                                                                                                                                                                   .y
  24.                                                                                                                                                                                                
  25. },
  26. x dan y ialah kedudukan zarah, vx ialah halaju mendatar zarah, dan vy ialah halaju menegak zarah Tidak kira sama ada anda tahu nexttox atau seumpamanya, ia hanyalah pembolehubah sementara . tox, dan mainan ialah lokasi destinasi zarah.

    Pertama, berikan semua zarah destinasi, yang akan dibincangkan di bawah. Maksudnya, anda mahu zarah mencapai tempat itu, dan kemudian menentukan pembolehubah za sebagai pecutan Jika anda ingin mengetahui nilai tertentu, anda akan mendapat parameter anggaran melalui lebih banyak ujian, dan rasanya lebih kurang sama. za ialah pecutan garis antara zarah dan destinasi Oleh itu, kita boleh mengira pecutan mendatar dan pecutan menegak zarah melalui kedudukan zarah dan kedudukan destinasi melalui fungsi trigonometri mudah ini

    Kod JavaScriptSalin kandungan ke papan keratan
    1. var ax = za*(xc/ini.jl),
    2. ay = za*(yc/ini.jl),
    Selepas mempunyai pecutan mendatar dan pecutan menegak, langkah seterusnya adalah lebih mudah Kira kenaikan kelajuan mendatar dan kelajuan menegak secara langsung, dengan itu menukar nilai kelajuan mendatar dan kelajuan menegak



    .

    Kod XML/HTMLSalin kandungan ke papan keratan
    1. vx = (ini.vx ax*masa)*0.97,
    2. vy = (this.vy ay*masa)*0.97;
    Sebab mengapa ia didarabkan dengan 0.97 adalah untuk mensimulasikan kehilangan tenaga supaya zarah akan perlahan. masa ialah perbezaan masa antara setiap bingkai
    Selepas mengira halaju, hanya kemas kini kedudukan zarah.



    Kod XML/HTML
    Salin kandungan ke papan keratan
      ini.x = ini.vx*masa
    1. this.y = this.vy*time;
    Oleh kerana arah sambungan antara zarah dan destinasi sentiasa berubah semasa penerbangan, pecutan mendatar dan pecutan menegak zarah mesti dikira semula setiap bingkai.
    Ini adalah prinsip pergerakan, bukankah ia sangat mudah?

    Sekarang setelah kita bercakap tentang prinsip gerakan, mari kita bincangkan tentang pelaksanaan khusus animasi di atas: pemulaan animasi, lukis perkataan atau gambar yang diingini pada kanvas luar skrin, dan kemudian dapatkan piksel off- kanvas skrin melalui kaedah getImageData . Kemudian gunakan gelung untuk mencari kawasan yang dilukis dalam kanvas luar skrin Oleh kerana nilai data dalam imageData ialah tatasusunan rgba, kami menilai bahawa nilai terakhir, iaitu, ketelusan adalah lebih besar daripada 128, bermakna kawasan itu telah. dilukis. Kemudian dapatkan nilai xy kawasan Untuk mengelakkan terlalu banyak objek zarah daripada menyebabkan lag halaman, kami mengehadkan bilangan zarah Apabila mengambil piksel, nilai x dan nilai y meningkat sebanyak 2 setiap kali, dengan itu mengurangkan bilangan zarah zarah.



    Kod XML/HTML
    Salin kandungan ke papan keratan
    1. this.osCanvas = dokumen.createElement("canvas");   
    2.         var osCtx = ini.osCanvas.getContext("2d");   
    3.     
    4.         ini.osCanvas.width = 1000;   
    5.         ini.osCanvas.height = 150;   
    6.     
    7.         osCtx.textAlign = "center";   
    8.         osCtx.textBaseline = "tengah";   
    9.         osCtx.font="70px 微软雅黑,黑体 bold"
    10.         
    11. osCtx.fillStyle = "#1D181F"  
    12.         osCtx.fillText("Selamat Datang", this.osCanvas.width/2 , this.osCanvas.height/2-40);   
    13.         osCtx.fillText("To wAxes' HOME", this.osCanvas.width/2 , this.osCanvas.height/2 40);   
    14.         var 
    15. bigImageData = osCtx.getImageData(0,0,this.osCanivas.widosth,thivas.widosth .tinggi);   
    16.     
    17.         
    18. titik = [];   
    19.     
    20.         untuk(var 
    21. x=0;x<bigImageData.width;x =2){   
    22.              untuk(var 
    23. y=0;y<< 🎜>bigImageData.height;y =2){   
    24.                 var 
    25. i = (y*bigImageData.width   x)*4;   
    26.                 jika(bigImageData.data[i 3]
    27. >128){   
    28.                     var 
    29. titik = baharu Titik(   >>
    30.                          Math.random()>0.5?Math.random()*20 10:Math.vas()*20 can 🎜>
    31.                         -Math.random()*canvas.height*2,   
    32.                          0,   
    33.                          0,   
    34.                          x (canvas.width/2-this.osCanvas.width/2),   
    35.                          y (canvas.height/2-this.osCanvas.height/2),   
    36.                          "rgba(" bigImageData.data[i] "," bigImageData.data[i 1] "," bigImageData.data[i 2] ",1)"   
    37.                     );   
    38.                     dot.setEnd(canvas.width/2,canvas.height/2)   
    39.                     titik.tolak(titik);   
    40.                 }   
    41.             }   
    42.         }   

    通过循环获取到粒子的位置xy值后,把位置赋给粒子,成为粒子的目的地。一值后,把位置赋给粒子,成为粒子的目的地。倶始后出文字图片粒子化的效果了。


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!