第4讲:pixi.js绘制舞台、随窗口大小而改变画布大小和舞台位置

news2024/11/16 1:26:41

基于前面写的代码,在gamelets的工程目录下新建一个CanvasAndStage.ts
代码如下

import {Application, Graphics} from 'pixi.js';
// 不要忘了,一定要引用这个css样式,否则就会以默认样式显示
import './style.css'
// app.view就是画布,因为已经指定了泛型:HTMLCanvasElement
let app = new Application<HTMLCanvasElement>();
document.body.appendChild(app.view);

// // 改画布尺寸方法一
// app.renderer.resize(640, 480);

// // 改画布尺寸方法二
// app.view.width = 640;
// app.view.height = 480;


// // app.renderer是渲染器对象
// app.renderer.resize(
//     window.innerWidth, // 视窗内部不含框的宽
//     window.innerHeight // 视窗内部不含框的高
// )

// app.renderer.render(app.stage);


let stageSize = {
    width: 0,
    height: 0
}

let stageFrame = new Graphics();
app.stage.addChild(stageFrame);

function refreshCanvasAndStage(): void{
    let winSize = {
        width: window.innerWidth,
        height: window.innerHeight
    };
    app.renderer.resize(winSize.width, winSize.height);
    let scale = Math.min(
        winSize.width / stageSize.width,
        winSize.height / stageSize.height
    );
    let stageRealSize = {
        width: stageSize.width * scale,
        height: stageSize.height * scale
    };
    app.stage.position.set(
        (winSize.width - stageRealSize.width) / 2,
        (winSize.height - stageRealSize.height) / 2
    );
}
function redrawStageFrame(): void{
    stageFrame.clear();
    stageFrame.lineStyle({
        color: 0xFF0000,
        width: 2
    })
    stageFrame.drawRect(0, 0, stageSize.width, stageSize.height);
}

function setStageSize(width: number, height: number): void{
    stageSize.width = width;
    stageSize.height = height;
    redrawStageFrame();
    refreshCanvasAndStage();
}

setStageSize(640, 480);

window.addEventListener('resize', refreshCanvasAndStage);

然后在index.html中,编辑代码,改成如下代码,现在我们引用CanvasAndStage.ts文件,而不要引用main.ts文件。

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite + TS</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- <script type="module" src="/src/main.ts"></script> -->
    <script type="module" src="/src/CanvasAndStage.ts"></script>
  </body>
</html>

随着浏览器缩放,黑色的画布会跟着缩放,容纳整个浏览器窗口。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宝塔面板部署前端项目

部署前端项目 1 打包自己的项目2 登录宝塔面板3 添加站点4 设置域名5 进入当前站点对应的文件目录中6 上传打包后的文件7 访问网站 1 打包自己的项目 2 登录宝塔面板 点击左侧“网站”菜单进入对应页面 点击“添加站点” 3 添加站点 填写域名&#xff0c;如果没有域名的&am…

公交行业系统特点及面临的挑战

在当前城市发展中&#xff0c;公交行业作为公共交通的重要组成部分&#xff0c;承担着重要的社会责任。随着科技的进步和城市化进程的加快&#xff0c;公交行业系统也在不断地发展和完善。然而&#xff0c;从目前的发展情况来看&#xff0c;公交行业系统也呈现出一些显著的特点…

jmeter乱码汇总

一、Web页面乱码 如果想让他显示中文可以按以下操作: 1、打开jmter配置文件 bin/jmeter.properties 2、修改配置文件&#xff0c;查找“sampleresult.default.encoding”将其改为utf8&#xff0c;注意要去掉“#”号 sampleresult.default.encodingutf-8 3、重启 jmeter 4、再次…

让TSN DDS运转起来——面向智能汽车的以太网测试解决方案

概述 作为OPEN联盟和AUTOSAR联盟的核心成员&#xff0c;经纬恒润多年来持续为国内外各大OEM和供应商提供车载以太网相关的咨询服务&#xff0c;涵盖TCP/IP、SOME/IP、DDS、诊断、TSN等前沿技术领域的设计和测试。同时&#xff0c;经纬恒润与行业内的合作伙伴紧密合作&#xff0…

Linux删除文件磁盘空间未释放解决办法

工作中经常遇到Linux系统磁盘空间不足&#xff0c;但是删除后较大的日志文件后&#xff0c;发现磁盘空间仍没有被释放。 解决思路 1、工作发现磁盘空间不足&#xff1b; 2、找到占用磁盘空间较大的文件进行删除&#xff1b; 3、删除文件后&#xff0c;查看磁盘空间使用情况…

Web Serial串口通信实现WEB浏览器读写M1卡

本示例使用的设备&#xff1a;RS232串口RFID NFC IC卡读写器可二次开发编程发卡器USB转COM-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> &l…

第10章 启动过程组 (启动过程组的重点工作)

第10章 启动过程组 10.3启动过程组的重点工作&#xff0c;在第三版教材第362~364页&#xff1b; 文字图片音频方式 第一个知识点&#xff1a;项目启动会议 1、作用 标志着对项目经理责权的定义结果的正式公布&#xff0c;通常由项目经理负责组织和召开。2、目的 使项目各…

AI网络爬虫:下载m3u8视频文件

要下载m3u8视频文件&#xff0c;首先得找到m3u8地址&#xff0c;按下F12键&#xff0c;看网络-fetch/xhr,然后找网址中包括m3u8的地址&#xff0c;再预览或者看下相应 https://1304688195.vod2.myqcloud.com/9d058fb7vodtranscq1304688195/1194c6da1253642699220090018/video_1…

【阅读论文】-- IDmvis:面向1型糖尿病治疗决策支持的时序事件序列可视化

IDMVis: Temporal Event Sequence Visualization for Type 1 Diabetes Treatment Decision Support 摘要1 引言2 1 型糖尿病的背景3 相关工作3.1 时间事件序列可视化3.2 电子健康记录可视化3.3 1 型糖尿病可视化3.4 任务分析与抽象 4 数据抽象5 层次化任务抽象5.1 临床医生工作…

【IM 服务】新用户为什么刚注册就能收到通知?为什么能接收注册前的通知?

功能说明&#xff1a; 默认新注册的用户可以接收到注册前 7 天内的广播消息。您可以从控制台免费基础功能页面关闭该服务。 开通方式&#xff1a; 访问开发者后台 免费基础功能 1页面&#xff0c;确认应用名称与环境&#xff08;开发 /生产 &#xff09;正确无误后&#xff0c…

统一视频接入平台LntonCVS视频共享交换平台智慧景区运用方案

随着夏季的到来&#xff0c;各地景区迎来了大量游客&#xff0c;而景区管理面临的挑战也愈加严峻&#xff0c;尤其是安全问题显得格外突出。 视频监控在预防各类安全事故方面发挥着重要作用&#xff0c;不论是自然景区还是人文景区&#xff0c;都潜藏着诸多安全隐患&#xff0…

eslint 与 prettier 的一些常见的配置项(很详细)

目录 1、eslint 常见配置项&#xff08;语法规范&#xff09; 2、 prettier 常见的配置项&#xff08;格式规范&#xff09; 代码规范相关内容看小编的该文章&#xff0c;获取对你有更好的帮助 vsCode代码格式化&#xff08;理解eslint、vetur、prettier&#xff0c;实现格式…

AIPainter:创意绘画的智能助手

AIPainter 介绍 AIPainter是一款简单易用的AI画图工具&#xff0c;支持文生图、图生图&#xff08;提示词改图、图片变体、分辨率增强等&#xff09;&#xff0c;底层大模型基于开源的腾讯混元文生图、SDXL等。 功能特点 提示词库 AIPainter默认提供了一些常用场景的提示词供…

(python)小学出题热门词汇可视化绘制

1.代码 import pandas as pd from wordcloud import WordCloud import matplotlib.pyplot as plt from collections import Counter import jieba # 如果你处理的是中文文本&#xff0c;需要jieba分词 import re # 停用词列表&#xff0c;这里只是示例&#xff0c…

2024年【R2移动式压力容器充装】考试总结及R2移动式压力容器充装试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【R2移动式压力容器充装】考试总结及R2移动式压力容器充装试题及解析&#xff0c;包含R2移动式压力容器充装考试总结答案和解析及R2移动式压力容器充装试题及解析练习。安全生产模拟考试一点通结合国家R2移动式…

PWN练习---Heap_1

heap_Easy_Uaf 题源&#xff1a;PolarD&N 考点&#xff1a;UAF漏洞(use after free) 源码 程序是一个菜单&#xff0c;可以实现add&#xff0c;dele&#xff0c;edit&#xff0c;puts 堆块内容等的功能。&#xff08;堆块编号从0开始&#xff09; 注意到一个存在backdoor的…

定制化服务:可燃气体报警器检定收费新模式

随着工业化和城市化的快速发展&#xff0c;可燃气体报警器作为重要的安全监测设备&#xff0c;其准确性和可靠性对于保障人们的生命财产安全至关重要。因此&#xff0c;可燃气体报警器的定期检定和维护显得尤为重要。 在这篇文章中&#xff0c;佰德将围绕可燃气体报警器检定收…

ssm 宠物领养系统-计算机毕业设计源码08465

目 录 摘要 1 绪论 1.1课题背景及意义 1.2研究现状 1.3ssm框架介绍 1.3论文结构与章节安排 2 宠物领养系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 …

Android Native 客户端属性配置系统使用说明

Android Native 客户端属性配置系统使用说明 背景和问题现代 android 开发基本都基于 gradle 属性设置来进行定制化编译,随着项目的迭代,工程结构越发复杂,配置属性越来越多,越来越多的配置使得上手难度越来越大。 解决方案设计一般而言,在 android 开发中,Gradle 属性系…

Calibre - 合并电子书(EpubMerge)

这里使用 Calibre 软件和 EpubMerge 插件 EpubMerge github &#xff1a; https://github.com/JimmXinu/EpubMerge 1、安装 Merge 插件 安装后需要重启 calibre 2、查看设置 4 3、选中文件、开始合并 合并完成后&#xff0c;会弹窗窗口&#xff0c;来编辑 合辑的元信息 完成…