Rumah hujung hadapan web Tutorial H5 canvas 像素级碰撞

canvas 像素级碰撞

May 17, 2016 am 09:08 AM
admin h

demo地址http://06wjin.sinaapp.com/html5/hitTest/     用鼠标拖动

1首先先判断两个图片的矩形区域有无碰撞

判断两个矩形的中心距离即可

2如果矩形区域有碰撞则检测上图红色矩形区域的像素,这里有两种方法
a 直接判断,循环检测两位图在红色矩形内是否有一点像素的alpha点都不为0,如果有则说明碰撞

  • context.drawImage(img1, x1, y1);//画第一张位图
  •         var data1 = context.getImageData(minx, miny, maxx - minx, maxy - miny).data;//获取第一张位图红色矩形内像素
  •         context.clearRect(x1, y1,img1.width,img1.height);//清除第一张位图
  •         context.drawImage(img2, x2, y2);//画第二张位图
  •         var data2 = context.getImageData(minx, miny, maxx - minx, maxy - miny).data;//获取第二章位图红色矩形内像素

  •         for(var i = 3; i
  •         {
  •       if(data1 > 0 && data2 > 0) return true;//循环判断alpha值,这里可以设置透明阙值,比如把0改为0.2,意味着透明度为0.2时就认为不碰撞了
  •         }
  •         return false;




b将绘图模式改为xor(xor是指相交部分透明,具体见站长上篇教程),也可以判断
  • context.drawImage(img1, x1,y1);//画第一张位图
  •         context.globalCompositeOperation = 'xor';//改绘图模式为xor
  •         context.drawImage(img2, x2,y2);//画第二张位图
  •         var data = context.getImageData(minx, miny, maxx - minx, maxy - miny).data;//获取位图红色矩形内像素
  •         context.globalCompositeOperation = 'source-over';//把绘图模式改回去

  •         for(var i = 3; i
  •         {

  •                 if(data == 0 ) return true;//若有透明像素,则碰撞
  •         }
  •         return false;



下面是一个2d精灵类,碰撞直接用sprite1.hitTest(sprite2)就好
  • function Sprite(x, y, img, width, height)
  • {
  •     this.x = x;
  •     this.y = y;
  •     this.img = document.getElementById(img);
  •     this.width = width;
  •     this.height = height;
  •     this.halfWidth = this.width/2;
  •     this.halfHeight = this.height/2;
  •     this.angle = 0;角度
  •     this.scaleX = 1;//水平缩放
  •     this.scaleY = 1;//竖直缩放
  •     this.alpha = 1;//透明度
  •     this.isDrug = false;//是否拖到
  • }

  • Sprite.prototype.draw = function()
  • {
  •    context.save();
  •    context.translate(this.x + this.halfWidth, this.y + this.halfHeight);
  •    context.globalAlpha = this.alpha;//修改透明度
  •    context.rotate(this.angle);//旋转角度
  •    context.scale(this.scaleX, this.scaleY);//缩放
  •    context.drawImage(this.img, -this.halfWidth, -this.halfHeight);
  •    context.restore();
  • }

  • Sprite.prototype.hitTest = function(sprite)
  • {
  •         var minx = this.x > sprite.x ? this.x :sprite.x;
  •         var maxx = this.x + this.width
  •         var miny = this.y > sprite.y ? this.y : sprite.y;
  •         var maxy = this.y + this.width

  •         if (minx >= maxx || miny >= maxy) {return false;}

  •         var canvas = document.createElement('canvas');
  •         canvas.setAttribute('width', 550);
  •         canvas.setAttribute('height', 400);
  •         var context = canvas.getContext('2d');


  •         /*第一种方法*/
  •         context.drawImage(this.img, this.x, this.y);
  •         var data1 = context.getImageData(minx, miny, maxx - minx, maxy - miny).data;
  •         context.clearRect(0, 0, 550, 400);
  •         context.drawImage(sprite.img, sprite.x, sprite.y);
  •         var data2 = context.getImageData(minx, miny, maxx - minx, maxy - miny).data;

  •         for(var i = 3; i
  •         {
  •                 if(data1 > 0 && data2 > 0) return true;
  •         }
  •         return false;

  •         /*第二种方法
  •         context.drawImage(this.img, this.x, this.y);
  •         context.globalCompositeOperation = 'xor';
  •         context.drawImage(sprite.img, sprite.x, sprite.y);
  •         var data = context.getImageData(minx, miny, maxx - minx, maxy - miny).data;
  •         context.globalCompositeOperation = 'source-over';

  •         for(var i = 3; i
  •         {

  •                 if(data == 0 ) return true;
  •         }
  •         return false;*/
  • }



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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara uniapp mencapai penukaran pantas antara program mini dan H5 Cara uniapp mencapai penukaran pantas antara program mini dan H5 Oct 20, 2023 pm 02:12 PM

Bagaimana uniapp boleh mencapai penukaran pantas antara program mini dan H5 memerlukan contoh kod khusus Dalam beberapa tahun kebelakangan ini, dengan perkembangan Internet mudah alih dan populariti telefon pintar, program mini dan H5 telah menjadi bentuk aplikasi yang sangat diperlukan. Sebagai rangka kerja pembangunan merentas platform, uniapp boleh dengan cepat merealisasikan penukaran antara program kecil dan H5 berdasarkan set kod, meningkatkan kecekapan pembangunan. Artikel ini akan memperkenalkan cara uniapp boleh mencapai penukaran pantas antara program mini dan H5, dan memberikan contoh kod khusus. 1. Pengenalan kepada uniapp unia

Versi mana yang lebih stabil: win1121h2 atau 22h2? Versi mana yang lebih stabil: win1121h2 atau 22h2? Jan 04, 2024 am 08:53 AM

Membandingkan dua versi win1121h2 dan 22h2, 22h2 yang terakhir adalah lebih stabil, dan 22h2 mempunyai lebih banyak fungsi Berbanding dengan 21h2 sebelumnya, banyak fungsi telah dipertingkatkan. Mana satu lebih stabil, win1121h2 atau 22h2: Jawapan: 22h2 adalah lebih stabil. 22h2 menambah banyak ciri, dan masalah 21h2 juga telah diperbaiki dalam 22h2. Ciri kemas kini 22h2: Folder aplikasi dalam menu mula. Kawasan tetap boleh laras dalam menu Mula. Seret dan lepas pada bar tugas. Focus Assist disepadukan dengan Pusat Pemberitahuan. Ciri kertas dinding "Spotlight" baharu. baru

Apakah peranan dan penggunaan pemantauan pentadbir springboot Apakah peranan dan penggunaan pemantauan pentadbir springboot May 25, 2023 pm 06:52 PM

Senario yang boleh digunakan: 1. Skala projek tidak besar 2. Bilangan pengguna tidak terlalu besar, dan keperluan bersamaan tidak kuat 3. Tiada daya operasi dan penyelenggaraan yang khusus projek biasa, atau unit di mana pembahagian tanggungjawab tidak begitu jelas. Selalunya sistem pergi daripada keperluan kepada reka bentuk, pembangunan, ujian kepada pelancaran akhir, operasi dan penyelenggaraan. Selalunya 80% daripada tugasan diselesaikan oleh pasukan pembangunan. Oleh itu, selain melaksanakan fungsi sistem, pembangun juga mesti menyediakan pelanggan dengan perundingan dan menjawab soalan dan menyelesaikan masalah pengeluaran. Cuba bayangkan, selepas sesuatu aplikasi dilancarkan, tiada langkah pemantauan. Sama seperti memandu kereta tanpa sebarang papan pemuka, tiada siapa yang berasa selamat di jalan raya seperti ini. Cara mengimbangi kesederhanaan dan kecekapan adalah sesuatu yang patut difikirkan. 1. Springb

Cara menggunakan Flask-Admin untuk melaksanakan antara muka pengurusan latar belakang Cara menggunakan Flask-Admin untuk melaksanakan antara muka pengurusan latar belakang Aug 03, 2023 pm 11:30 PM

Cara menggunakan Flask-Admin untuk melaksanakan antara muka pengurusan bahagian belakang Pengenalan latar belakang: Dengan pembangunan tapak web dan aplikasi, antara muka pengurusan bahagian belakang menjadi semakin penting. Semasa proses pembangunan, kami sering memerlukan antara muka pengurusan bahagian belakang yang mudah dan pantas untuk mengurus data, pengguna dan maklumat penting lain. Flask-Admin ialah sambungan Flask yang berkuasa dan mudah digunakan yang boleh membantu kami melaksanakan antara muka pengurusan latar belakang dengan cepat. Flask-Admin ialah projek sumber terbuka berdasarkan Flask dan SQLAlchemy

Mana yang lebih baik antara win101909 dan 21h2? Mana yang lebih baik antara win101909 dan 21h2? Dec 26, 2023 pm 02:01 PM

Windows 101909 pada masa ini dianggap sebagai salah satu versi yang paling stabil dan boleh dipercayai Walau bagaimanapun, malangnya, sokongan perkhidmatan untuk versi ini telah tamat baru-baru ini. 21H2 adalah versi yang agak stabil Malah, dari situasi sebenar, kedua-duanya adalah pilihan yang sangat baik. Mana yang lebih baik, win101909 atau 21h2 Jawapan: 1909 lebih stabil, dan 21h2 akan lebih selamat. Dalam persekitaran semasa, 1909 masih dianggap sebagai salah satu versi yang paling stabil dan boleh dipercayai. Walau bagaimanapun, versi Win101909 telah dihentikan secara rasmi pada 11 Mei 2021. WindowsServer21h2 komited untuk menyediakan sokongan fungsi IT yang lebih profesional kepada majoriti pengguna. 1. Selepas ujian sebenar oleh ramai pengguna,

Anda memerlukan kebenaran yang diberikan oleh pentadbir untuk membuat perubahan pada fail ini. Bagaimana untuk menyelesaikan masalah ini? Anda memerlukan kebenaran yang diberikan oleh pentadbir untuk membuat perubahan pada fail ini. Bagaimana untuk menyelesaikan masalah ini? Jul 26, 2023 am 10:56 AM

Anda memerlukan kebenaran yang diberikan oleh pentadbir untuk membuat perubahan pada fail ini Penyelesaian: 1. Selepas memilih akaun pentadbir pada antara muka log masuk dan memasukkan kata laluan, anda boleh mengubah suai fail dengan lancar 2. Anda boleh klik kanan fail dan pilih Kaedah "Sebagai Pentadbir" "Jalankan sebagai" 3. Ubah suai kebenaran fail, klik kanan fail, pilih "Properties", klik tab "Security", kemudian klik butang "Edit", pilih nama pengguna anda, dan kemudian semak Pilihan "Kawalan Penuh" ; 4. Gunakan prompt arahan untuk menyelesaikan masalah 5. Tetapkan kebenaran UA.

Manakah pilihan yang lebih baik: win1123h2 atau 22h2? Manakah pilihan yang lebih baik: win1123h2 atau 22h2? Dec 28, 2023 pm 03:09 PM

Versi 23h2 dan versi 22h2 dalam sistem Windows 11 masing-masing akan dikeluarkan pada 2023 dan 2022 Secara umumnya, kemas kini sistem semakin baik dan lebih baik. Mana satu lebih baik, win1123h2 atau 22h2 Jawapan: win1123h2 lebih baik. Menurut laporan, win1123h2 ialah kemas kini versi kumulatif dari 22h2 ke versi seterusnya, dan semuanya adalah platform yang sama. Ini bermakna tiada isu keserasian antara kedua-dua versi adalah disyorkan agar anda mengemas kininya tepat pada masanya. Versi win1123h2 membawakan kita banyak ciri praktikal, seperti mod tidak pernah bergabung untuk aplikasi tetingkap bar tugas. Ada lagi

Selesaikan masalah tidak mendapat kemas kini Win11 23H2 Selesaikan masalah tidak mendapat kemas kini Win11 23H2 Jan 14, 2024 pm 09:24 PM

Semua orang mahu mengemas kini versi 23H2 Win11 baru-baru ini, tetapi sebilangan kecil pengguna masih belum menerima mesej tolak kemas kini Mungkin proses dalam kemajuan kemas kini latar belakang tersekat, dan ia akan menjadi baik selepas beberapa ketika. Apa yang perlu dilakukan jika kemas kini Win11 gagal mendapat 23H2 Kaedah 1: Tunggu dengan sabar Jika pengguna menyemak status kemas kini komputer dan mendapati ia tersekat, kita boleh menunggu sebentar dan sistem akan terus mengemas kini. Kaedah 2: Kosongkan cache yang dikemas kini Jika pengguna telah mengemas kini sistem sebelum ini dan belum mengosongkan cache yang lebih terperinci, ia akan menjejaskan kemas kini biasa 23h2. Anda boleh mengosongkannya secara manual. Kaedah ketiga: Gunakan pemasangan imej Anda disyorkan untuk pergi ke tapak web rasmi Microsoft untuk memuat turun fail imej win1123h2, dan kemudian mengemas kini fail.

See all articles