ad

Javafx帆布:专门在另外一种形状中绘制形状-英雄云拓展知识分享

匿名投稿 243 2024-01-22

我至今为止正在Java开发游戏,并且我一直在尝试弄清楚如何在画布上绘制形状(例如一个圆圈),以不同的形状(例如正方形),但仅绘制相交正方形的圆的一部份类似于Photoshop中层之间的剪裁面膜。

我尝试使用 GraphicsContext.clearRect() 清除底部形状的区域,但可以消除背景。

Javafx帆布:专门在另外一种形状中绘制形状-英雄云拓展知识分享

下面的代码产生了此结果:

但是,这就是我想要的结果:

import javafx.animation.AnimationTimer;

import javafx.application.Application;

import javafx.scene.Group;

import javafx.scene.Scene;

import javafx.scene.canvas.Canvas;

import javafx.scene.canvas.GraphicsContext;

import javafx.scene.paint.Color;

import javafx.scene.transform.Rotate;

import javafx.stage.Stage;

public class CircleWithinSquareTest extends Application {

@Override

public void start(Stage stage) throws Exception {

int width = 200;

int height = 200;

Canvas canvas = new Canvas(width, height);

GraphicsContext gc = canvas.getGraphicsContext2D();

AnimationTimer timer = new AnimationTimer() {

final int bgCellSize = 8;

final int x = 100;

final int y = 100;

double angle = 0;

@Override

public void handle(long now) {

/* Draw checkered background */

gc.setFill(Color.WHITE);

gc.fillRect(0, 0, width, height);

gc.setFill(Color.LIGHTGRAY);

boolean odd = false;

for (int y = 0; y < height; y += bgCellSize) {

odd = !odd;

for (int x = odd ? 0 : bgCellSize; x < width; x += bgCellSize * 2) {

gc.fillRect(x, y, bgCellSize, bgCellSize);

}

}

/* Draw square */

gc.setFill(Color.BLUE);

gc.fillRect(x, y, 50, 50);

/* Draw circle */

gc.save();

angle += 5;

if (angle >= 360) {

angle = 0;

}

Rotate r = new Rotate(angle, x, y);

gc.setTransform(r.getMxx(), r.getMyx(), r.getMxy(), r.getMyy(), r.getTx(), r.getTy());

gc.setFill(Color.RED);

gc.fillOval(x, y, 30, 30);

gc.restore();

}

};

timer.start();

Group root = new Group(canvas);

Scene scene = new Scene(root);

stage.setScene(scene);

stage.show();

}

}

看答案

您可使用 剪裁,在setTransform之前添加下一个代码:

gc.beginPath();

gc.rect(x, y, 50, 50);

gc.closePath();

gc.clip();


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:爪哇 帆布
上一篇:PIP毛病:需要Microsoft Visual C ++ 14.0-英雄云拓展知识分享
下一篇:Fabricjs删除选定的对象-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×