L o a d i n g . . .
主打一个C++
文章详情

canvas将序列png多图解析绘制

Posted on 2023-01-08 14:56:55 by 主打一个C++

const plistData = {
  "frames": {
    "thunder/1.png": {
      "width": 446,
      "height": 79,
      "originalWidth": 446,
      "originalHeight": 79,
      "x": 0,
      "y": 0,
      "offsetX": 0,
      "offsetY": 0
    },
    "thunder/5.png": {
      "width": 446,
      "height": 79,
      "originalWidth": 446,
      "originalHeight": 79,
      "x": 448,
      "y": 0,
      "offsetX": 0,
      "offsetY": 0
    },
    "thunder/2.png": {
      "width": 446,
      "height": 79,
      "originalWidth": 446,
      "originalHeight": 79,
      "x": 0,
      "y": 81,
      "offsetX": 0,
      "offsetY": 0
    },
    "thunder/3.png": {
      "width": 446,
      "height": 79,
      "originalWidth": 446,
      "originalHeight": 79,
      "x": 448,
      "y": 81,
      "offsetX": 0,
      "offsetY": 0
    },
    "thunder/4.png": {
      "width": 446,
      "height": 79,
      "originalWidth": 446,
      "originalHeight": 79,
      "x": 0,
      "y": 162,
      "offsetX": 0,
      "offsetY": 0
    }
  },
  "metadata": {
    "format": 0,
    "textureFileName": "thunder0.png",
    "realTextureFileName": "thunder0.png",
    "size": "{1024,1024}"
  },
  "texture": {
    "width": 1024,
    "height": 1024
  }
};


// 解析.plist中的frames数据
const frames = plistData.frames;
// 获得canvas元素和上下文
const canvas_draw = document.getElementById('animationCanvas');
const canvas_ctx = canvas_draw.getContext('2d');
// 加载纹理图像
const textureImage = new Image();
textureImage.src = "thunder0.png";
// 播放动画的函数
let currentFrameIndex = 0;
function playAnimation() {
  let frameData = frames[`thunder/${currentFrameIndex + 1}.png`];
  if (!frameData) {
    return;
    // 重置帧索引以循环播放
    currentFrameIndex = 0;
    frameData = frames[`thunder/${currentFrameIndex + 1}.png`];
  }

  canvas_ctx.clearRect(0, 0, canvas_draw.width, canvas_draw.height);
  canvas_ctx.drawImage(
    textureImage,
    frameData.x, frameData.y, frameData.width, frameData.height,
    frameData.offsetX, frameData.offsetY, frameData.originalWidth, frameData.originalHeight
  );

  currentFrameIndex++;
  // 增加延迟,例如延迟100毫秒
  setTimeout(function () {
    requestAnimationFrame(playAnimation);
  }, 200);
}
{/* // 加载完成后播放动画 */ }
textureImage.onload = playAnimation;

function start(){
  currentFrameIndex = 0;
  playAnimation();
}

canvas测试组件


<canvas id="animationCanvas" width="500" height="500"></canvas>


*转载请注明出处:原文链接:https://cpp.vin/page/127.html

作者近期文章
  • 随手笔记
  • 主打一个C++   2025-01-11 20:02:01
  • 都2000000025年了。还有不能随意访问guthub的,仔细看。在国内其实是可以正常访问的,gfw并没屏蔽。这里给出其中一个简单直接的方法稳定访问。1. 随便百度一个”dn
提示
×
确定
数据库执行: 8次 总耗时: 0.01s
页面加载耗时: 



wechat +447752296473
wechat cpp-blog