pixi实现鼠标拖动顺时针旋转控制夜间骑行的自动车速度代码
代码语言:html
所属分类:其他
代码描述:pixi实现鼠标拖动顺时针旋转控制夜间骑行的自动车速度代码
代码标签: pixi 鼠标 拖动 顺时针 旋转 控制 夜间 骑行 自动车 速度 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
body {
margin: 0px;
}
</style>
</head>
<body translate="no">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pixi.8.10.2.js"></script>
<script type="module">
class Main {
static start() {
new ViewManager();
}
}
export class ViewManager {
constructor() {
this.tickHandler = () => {
this._ui.update();
this._worldManager.update();
};
this._ui = new UserInterface();
this._worldManager = new WorldManager();
this.init().then();
}
async init() {
const app = new PIXI.Application();
await app.init({
background: "#333",
resizeTo: window
});
document.body.appendChild(app.canvas);
app.stage.addChild(this._worldManager);
app.stage.addChild(this._ui);
app.ticker.maxFPS = 60;
app.ticker.minFPS = 60;
app.ticker.add(this.tickHandler);
window.addEventListener("resize", () => this.resize());
this.resize();
}
resize() {
if (1920 / 1080 < window.innerWidth / window.innerHeight) {
const scale = window.innerHeight / 1080;
this._worldManager.scale.set(scale, scale);
this._worldManager.x = (window.innerWidth - 1920 * scale) * 0.5;
this._worldManager.y = 0;
}
else {
const scale = window.innerWidth / 1920;
this._worldManager.scale.set(scale, scale);
this._worldManager.x = 0;
this._worldManager.y = (window.innerHeight - 1080 * scale) * 0.5;
}
this._ui.resize();
}
}
class UserInterface extends PIXI.Container {
constructor() {
super();
this._isMouseDown = false;
this.mouseDownHandler = (event) => {
console.log("mouseDownHandler" + Math.random());
this._isMouseDown = true;
this._wheel.mouseDown(event);
this.on("pointermove", this.mouseMoveHandler);
this.on("pointerup", this.mouseUpHandler);
};
this.mouseUpHandler = () => {
this._isMouseDown = false;
this._wheel.mouseUp();
this.off("pointermove", this.mouseMoveHandler);
this.off("pointerup", this.mouseUpHandler);
};
this.mouseOutHandler = () => {
if (this._isMouseDown)
this.mouseUpHandler();
};
this.mouseMoveHandler = (event) => {
this._wheel.mouseMove(event);
};
this._graphics = new PIXI.Graphics();
this.addChild(this._graphics);
this._graphics.rect(0, 0, 1920, 1080);
this._graphics.fill(0xff2233);
this._graphics.moveTo(0, 0);
this._graphics.lineTo(1920, 1080);
this._graphics.moveTo(0, 1080);
this._graphics.lineTo(1920, 0);
this._graphics.stroke({ width: 1, color: 0x000000 });
this._graphics.alpha = 0.0;
this.eventMode = "static";
this.on("pointerdown", this.mouseDownHandler);
this.on("pointerout", this.mouseOutHandler);
this._wheel = new InteractiveWheel();
this._wheel.alpha = 0;
this.addChild(this._wheel);
}
update() {
const speed = 0.15;
if (this._isMouseDown) {
if (this._wheel.alpha < 1) {
const da = 1 - this._wheel.alpha;
if (Math.abs(da) < 0.05) {
this._wheel.alpha = 1;
}
else {
this._wheel.alpha += speed * da;
}
}
}
else {
if (this._wheel.alpha > 0) {
const da = 0 - this._wheel.alpha;
if (Math.abs(da) < 0.05) {
this._wheel.alpha = 0;
}
else {
this._wheel.alpha += speed * da;
}
}
}
this._wheel.update();
}
resize() {
this._graphics.width = window.innerWidth;
this._graphics.height = window.innerHeight;
}
}
class InteractiveWheel extends PIXI.Container {
constructor() {
super();
this._wheelRadian = 0;
this._vr = 0;
this.isRotationStart = false;
this.mouseDown = (event) => {
this.isRotationStart = false;
this._arrow.alpha = 1;
const globalPosition = event.data.global;
const centerX = window.innerWidth * 0.5;
const centerY = window.innerHeight * 0.5;
this._wheelRadian = Math.atan2(centerY - globalPosition.y, centerX - globalPosition.x);
this._container.rotation = this._wheelRadian + Math.PI;
this.x = globalPosition.x + 80 * Math.cos(this._wheelRadian);
this.y = globalPosition.y + 80 * Math.sin(this._wheelRadian);
this._vr = 0.5;
clearInterval(this._id);
this._id = setInterval(() => {
this._vr = 0.5;
}, 2000);
};
this._contai.........完整代码请登录后点击上方下载按钮下载查看
















			
			
				
			
	
网友评论0