亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建圖像來繪制東西,然后在畫布上繪制圖像

創建圖像來繪制東西,然后在畫布上繪制圖像

慕村9548890 2023-04-01 16:31:36
大家好!是否可以使用 JavaScript 創建圖像然后在其上渲染形狀,然后將其繪制到游戲畫布上?無需使用 dataurl、url 或 src,就可以了!var ctx = document.getElementById("canvas").getContext("2d");var img = new Image();// TODO: Draw stuff to the image imgfunction game() {    window.requestAnimationFrame(game);    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);    ctx.drawImage(img, 0, 0, 256, 256);}window.requestAnimationFrame(game);
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

CanvasRenderingContext2D.drawImage()功能可以將多種類型的圖像作為源,包括另一個 Canvas。下面的示例顯示圖像已加載到第一個畫布中。然后你可以通過按住鼠標并移動它來繪制它。當您釋放時,第二個畫布將繪制第一個畫布當時的圖像。

所有的魔法都在最后一個函數中。

contextTwo.drawImage(canvasOne,?0,?0,?256,?256);

const canvasOne = document.getElementById('canvas1');

const canvasTwo = document.getElementById('canvas2');

const contextOne = canvasOne.getContext('2d');

const contextTwo = canvasTwo.getContext('2d');


canvasOne.width = 256;

canvasOne.height = 256;


canvasTwo.width = 256;

canvasTwo.height = 256;


const canvasBounds = canvasOne.getBoundingClientRect();


let mouseData = {

? isClicked: false,

? position: [0, 0],

}


const onMouseDown = event => {

? mouseData.isClicked = true;

? render();

};


const onMouseMove = ({ clientX, clientY }) => {

? const x = clientX - canvasBounds.left;

? const y = clientY - canvasBounds.top;

? mouseData.position = [x, y];

? render();

};


const onMouseUp = event => {

? mouseData.isClicked = false;

? render();

? moveImage();

};


function setup() {

? const img = new Image();

? img.src = '//picsum.photos/256/256'

? img.onload = function() {

? ? contextOne.drawImage(img, 0, 0, 256, 256);

? }

??

? canvasOne.addEventListener('mousedown', onMouseDown);

? canvasOne.addEventListener('mousemove', onMouseMove);

? canvasOne.addEventListener('mouseup', onMouseUp);

}


function render() {

? requestAnimationFrame(() => {

? ? const { isClicked, position } = mouseData;

? ? const [ x, y ] = position;

? ? if (isClicked) {

? ? ? contextOne.beginPath();

? ? ? contextOne.arc(x, y, 5, 0, Math.PI * 2)

? ? ? contextOne.fillStyle = 'red'

? ? ? contextOne.fill();

? ? ? contextOne.closePath();

? ? }

? });

}


function moveImage() {

? contextTwo.drawImage(canvasOne, 0, 0, 256, 256);

}


setup();

body {

? display: flex;

}


canvas {

? width: 256px;

? height: 256px;

? border: 1px solid #d0d0d0;

}

<canvas id="canvas1"></canvas>

<canvas id="canvas2"></canvas>


查看完整回答
反對 回復 2023-04-01
  • 1 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號