- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Pixi.js v4 graphics library用 JavaScript 制作游戏。我知道我可以像这样绘制一个黑色 + 圆 Angular 矩形:
const rectangle = new pixi.Graphics();
rectangle.beginFill(0); // Color it black
rectangle.drawRoundedRect(
0,
0,
100, // Make it 100x100
100,
5, // Make the rounded corners have a radius of 5
);
rectangle.endFill();
stage.addChild(rectangle);
如何绘制一个从白到黑渐变的圆 Angular 矩形?
如何绘制一个具有渐变不透明度的圆 Angular 矩形,使其从左到右淡入?
最佳答案
如果没有额外的代码,似乎无法使用 pixi.js 实现您需要的功能,但我们可以施展魔法来实现它。这是我得到的结果:https://jsfiddle.net/exkf3zfo/21/
底部颜色是 alpha 为 0.2 的纯红色。
我会将整个过程拆分为接下来的步骤:
这是代码本身:
var app = new PIXI.Application(800, 600, {
antialias: true
});
document.body.appendChild(app.view);
// Functions
// param color is a number (e.g. 255)
// return value is a string (e.g. ff)
var prepareRGBChannelColor = function(channelColor) {
var colorText = channelColor.toString(16);
if (colorText.length < 2) {
while (colorText.length < 2) {
colorText = "0" + colorText;
}
}
return colorText;
}
// Getting RGB channels from a number color
// param color is a number
// return an RGB channels object {red: number, green: number, blue: number}
var getRGBChannels = function(color) {
var colorText = color.toString(16);
if (colorText.length < 6) {
while (colorText.length < 6) {
colorText = "0" + colorText;
}
}
var result = {
red: parseInt(colorText.slice(0, 2), 16),
green: parseInt(colorText.slice(2, 4), 16),
blue: parseInt(colorText.slice(4, 6), 16)
};
return result;
}
// Preparaiton of a color data object
// param color is a number [0-255]
// param alpha is a number [0-1]
// return the color data object {color: number, alpha: number, channels: {red: number, green: number, blue: number}}
var prepareColorData = function(color, alpha) {
return {
color: color,
alpha: alpha,
channels: getRGBChannels(color)
}
}
// Getting the color of a gradient for a very specific gradient coef
// param from is a color data object
// param to is a color data object
// return value is of the same type
var getColorOfGradient = function(from, to, coef) {
if (!from.alpha && from.alpha !== 0) {
from.alpha = 1;
}
if (!from.alpha && from.alpha !== 0) {
to.alpha = 1;
}
var colorRed = Math.floor(from.channels.red + coef * (to.channels.red - from.channels.red));
colorRed = Math.min(colorRed, 255);
var colorGreen = Math.floor(from.channels.green + coef * (to.channels.green - from.channels.green));
colorGreen = Math.min(colorGreen, 255);
var colorBlue = Math.floor(from.channels.blue + coef * (to.channels.blue - from.channels.blue));
colorBlue = Math.min(colorBlue, 255);
var rgb = prepareRGBChannelColor(colorRed) + prepareRGBChannelColor(colorGreen) + prepareRGBChannelColor(colorBlue);
return {
color: parseInt(rgb, 16),
alpha: from.alpha + coef * (to.alpha - from.alpha)
};
}
var startTime = Date.now();
console.log("start: " + startTime);
// Drawing the gradient
//
var gradient = new PIXI.Graphics();
app.stage.addChild(gradient);
//
var rect = {
width: 200,
height: 200
};
var round = 20;
//
var colorFromData = prepareColorData(0xFF00FF, 1);
var colorToData = prepareColorData(0xFF0000, 0.2);
//
var stepCoef;
var stepColor;
var stepAlpha;
var stepsCount = 100;
var stepHeight = rect.height / stepsCount;
for (var stepIndex = 0; stepIndex < stepsCount; stepIndex++) {
stepCoef = stepIndex / stepsCount;
stepColor = getColorOfGradient(colorFromData, colorToData, stepCoef);
gradient.beginFill(stepColor.color, stepColor.alpha);
gradient.drawRect(
0,
rect.height * stepCoef,
rect.width,
stepHeight
);
}
// Applying a mask with round corners to the gradient
var roundMask = new PIXI.Graphics();
roundMask.beginFill(0x000000);
roundMask.drawRoundedRect(0, 0, rect.width, rect.height, round);
app.stage.addChild(roundMask);
gradient.mask = roundMask;
var endTime = Date.now();
console.log("end: " + endTime);
console.log("total: " + (endTime - startTime));
有趣的是,整个过程只需要2-5毫秒左右!
如果您不想将渐变的颜色更改为白色>黑色(如问题中所述),只需更改下一个参数:
var colorFromData = prepareColorData(0xFF00FF, 1);
var colorToData = prepareColorData(0xFF0000, 0.2);
收件人:
var colorFromData = prepareColorData(0xFFFFFF, 1);
var colorToData = prepareColorData(0x000000, 0.2);
关于javascript - Pixi.js - 绘制带渐变填充的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48370902/
我不熟悉PIXI.js进行游戏。 如何在不使用图像的情况下绘制半个圆形? 先感谢您! 最佳答案 在使用stackoverflow之前,请确保已阅读the official documentation。
我正在尝试从我的游戏中完全删除一个 Sprite (充当死亡角色)。我在网上能找到的只有: sprite.parent.removeChild(sprite); 当我这样做时, Sprite 停止渲染
[Chrome v32] 如何使用 PIXI.js 库绘制基本的红色矩形? 我试过这个(不工作) var stage = new PIXI.Stage(0xFFFFFF); var renderer
我使用的是 pixi.js v 3.0.0我的简单代码是 (function () { document.addEventListener('DOMContentLoaded', functi
我 npm 将 pixi.js 安装到了一个 typescript 项目中。此行(在许多示例中都可以找到)不起作用: import * as PIXI from 'pixi.js'; 我收到错误“找不
我有大约 10 个不同的图像文件需要动态加载到一个 PIXI.Texture 对象中。 pixi.js 有这种可能性吗?想想老虎机卷轴;我将每个单独的插槽符号作为图像,需要从这些图像构建卷轴条纹理。
我的问题是 chrome 浏览器在 ticker 开始大约 2 分钟后停止了。 const renderer = new PIXI.Renderer({ width: window.inner
我有一个通过 new PIXI.Sprite.fromImage(path) 创建的 Sprite ,如何实时增加它的亮度? 最佳答案 您可以使用 PIXI ColorMatrixFilter 执行此
我正在尝试使用 pixi.js 应用世界变换来获取 Graphics 实例的边界框 我对使用PIXI.Graphics documentation有点困惑。据我所知,它应该继承width,height
我画了直接图,所以我画了线的箭头,我是 pixi.js 和 javascript 的新手,我想学习它,你能帮助我如何画一个箭头吗是吗? 这是一个demo我想将箭头添加到链接。 这是绘制链接的代码,位于
我在使用 pixi.js 时遇到问题 我正在创建一个类似 http://www.wolverineunleashed.com/#muscles 的页面我创建了一个大舞台,用户可以使用他们的拖动方式,除
开始使用 PIXI 并快速了解文档并没有多大帮助。至少对我来说。 尝试使用冲击波过滤器... var shock = new PIXI.filters.ShockwaveFilter(); image
我有 pixy(CMUcam5)。是否可以从相机或类似的东西中获取矩阵,而无需从 charmed labs 重新编码预编码代码? 最佳答案 我认为你不能。在 pixy 论坛上有几个人要求提供视频源,开
有没有办法让 Canvas 对象滚动到内容之外。例子:用 1000*1000 创建的 Canvas 。并在 Canvas 上启用 PAN 和 Zoom。在 Canvas 上绘制一个矩形并用鼠标将矩形移
我构建了一个简单的 PIXI.js 应用程序来实现 PIXI.RenderTexture,但它不起作用。 它应该渲染两个方形 Sprite ,黑色和白色。黑色的添加了常规的stage.addChild
在我们的游戏中,我们使用 typescript、pixi.js、vscode、eslint。 我们有一个像这样的图像文件字典 export function getAllImages(): {name
有没有办法将图形转换为 Sprite ? 我有一个包含单个矩形的图形,并希望将其转换为 Sprite 以启用复杂的动画。 我试过做 let p= new Graphics(); p.beginFill
我有一个 JavaScript 图形对象。在这里面我有一个 pixi js 阶段作为私有(private)成员。在舞台上,我有一个 PIXI.Graphics() 对象,我将在其中保持两条垂直线。我在
我正在使用 Chrome 学习本教程 ( http://www.yeahbutisitflash.com/?p=5226 ),但不明白为什么这不起作用。这是我的控制台输出: init() succes
我有两个问题要揭露。 首先:我正在开发一个网站,我正在使用 Meteor 来构建其结构来处理前端后端和数据库,因为我没有太多使用各种界面的经验。我喜欢 Meteor,但我需要添加动画图形(主要是 2d
我是一名优秀的程序员,十分优秀!