简体   繁体   English

在 p5.js 中单击按钮更改图像

[英]Change image on button click in p5.js

I have 2 dimensional array filled with cells.我有填充单元格的二维数组。 i want this cell to update image on button press.我希望这个单元格在按钮按下时更新图像。 I want to pass the value to the constructor but something goes wrong and its nowt working.my thought was to pass to constructor image value this.img = img then in show_cell function change image value to this.img value.我想将值传递给构造函数,但出现问题并且它现在不起作用。我的想法是传递给构造函数图像值 this.img = img 然后在 show_cell function 中将图像值更改为 this.img 值。 when i press button it start function wher i add image to constructor and show grid.当我按下按钮时,它启动 function 我将图像添加到构造函数并显示网格。 non of this is working.这些都不起作用。 Please help, it give me a headache.请帮忙,这让我很头疼。

You've to draw the grid in draw() .您必须在draw()中绘制网格。 Note, draw() is continuously called by the system and redraws the entire window, it is the application loop.注意, draw()被系统不断调用,重绘整个window,就是应用循环。 At the begin of draw You've to set the background color ( background() ), then you've to draw the entire scene.在开始draw你必须设置背景颜色( background() ),然后你必须绘制整个场景。

Set a state variable ( show_grid ) when the button is pressed:按下按钮时设置 state 变量( show_grid ):

let show_grid = false;
function a(){
    show_grid = true;
}

Draw the grid dependent on the the state of the variable:根据变量的 state 绘制网格:

function draw() {

    background(255);

    if (show_grid) {
        grid.display();
    }

    fill(255);
    stroke(0);
    let fps = frameRate();
    text("FPS: " + fps.toFixed(0), 10, height - 10);
}

If you want to change the images on a click to a button, then you ve to use a variable (eg current_img`) wihich is used to draw the cells:如果您想通过单击将图像更改为按钮,那么您ve to use a variable (eg current_img`)来绘制单元格:

class Cell {
    constructor (column, row, size) {
        this.x = column;
        this.y = row;
        this.w = size;
    }
    show_cell () {
        image(current_img, this.x * this.w , this.y * this.w , this.w , this.w );
    }
}

When a button is clicked, then the current_image has to be changed:单击按钮时,必须更改current_image

function a(){
    show_grid = true;
    current_img = img1;
}

function b(){
    show_grid = true;
    current_img = img2;
}

See the example:请参阅示例:

 var grid; var current_img; var img1; var img2; function preload(){ img1 = loadImage('https://raw.githubusercontent.com/Rabbid76/graphics-snippets/master/resource/texture/fish64.png'); img2 = loadImage('https://raw.githubusercontent.com/Rabbid76/graphics-snippets/master/resource/texture/ball64.png'); } function setup() { const background_btn1 = select('#BgCategory1-btn1'); background_btn1.mousePressed(a); const background_btn2 = select('#BgCategory1-btn2'); background_btn2.mousePressed(b); let cnv = createCanvas(1000, 1000); cnv.parent('canvas-holder'); grid = new Grid(40); current_img = img1; } function draw() { background(128); if (show_grid) { grid.display(); } fill(255); stroke(0); let fps = frameRate(); text("FPS: " + fps.toFixed(0), 10, 30); } let show_grid = false; function a(){ show_grid = true; current_img = img1; } function b(){ show_grid = true; current_img = img2; } class Grid { constructor (cellSize) { this.cellSize = cellSize; this.numberOfColumns = floor(width / this.cellSize); this.numberOfRows = floor(height / this.cellSize); this.cells = new Array(this.numberOfColumns); for (var column = 0; column < this.numberOfColumns; column ++) { this.cells[column] = new Array(this.numberOfRows); } for (var column = 0; column < this.numberOfColumns; column ++) { for (var row = 0; row < this.numberOfRows; row++) { this.cells[column][row] = new Cell(column, row, cellSize) } } } display () { for (var column = 0; column < this.numberOfColumns; column ++) { for (var row = 0; row < this.numberOfRows; row++) { this.cells[column][row].show_cell(); } } } } class Cell { constructor (column, row, size) { this.x = column; this.y = row; this.w = size; } show_cell () { image(current_img, this.x * this.w, this.y * this.w, this.w, this.w ); } }
 #BgCategory1-btn1 { position: absolute; top: 0; left: 0; } #BgCategory1-btn2 { position: absolute; top: 0; left: 10%; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/p5.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.9.0/addons/p5.dom.js"></script> <button id= "BgCategory1-btn1" >image 1</button> <button id= "BgCategory1-btn2" >image 2</button> <div id = "canvas-holder"></div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM