开始旋转bt。单击并通过鼠标位置进行控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开始旋转bt。单击并通过鼠标位置进行控制相关的知识,希望对你有一定的参考价值。

我想在单击按钮时开始旋转,然后能够控制鼠标位置的旋转角度。

现在,我的代码运行旋转,但是我不知道如何通过单击按钮来启动旋转,然后在鼠标位置上对其进行控制。

我是javascript和p5js的新手。任何提示将不胜感激。

到目前为止,这是我的代码。

var grid;
var current_img;
var img1;
var img2;
var layerOne;

function preload()
{
  img1 =loadImage('https://i.imgur.com/Q6aZlme.jpg');
}

function setup() 
{
  let cnv = createCanvas(1000, 1000, );
  layerOne = createGraphics (1000, 1000);
  layerOne.grid = new Grid(40);
} 

function draw() 
{
  background(img1);
  layerOne.background(100,100,100);

  if (show_grid == true) 
  {
    push();
    let ts = millis() / 1000.0;
    let angle = radians( ts * 2.0 * Math.PI * 5.0 );
    translate( width / 2, height / 2 );
    rotate(angle);
    translate( -width / 2, -height / 2 );
    imageMode( CENTER );
    rectMode( CENTER );
    layerOne.grid.display();
    pop();
  }
}

let show_grid = false;

function a()
{
  show_grid = true;
  current_img = img1;
  image(layerOne,0,0);
}

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 );
  }
}

<html> 
  <button 
     id="BgCategory1-btn1" onclick="a()" 
     class="btn btn-primary" type="submit">
    Background1
  </button>
</html>
答案

HTML按钮不应属于“类型”提交,因为您不在表单范围内。 (提交按钮将启动表单操作。)

以下代码是恕我直言正确的:

<html> 
  <input 
     id="BgCategory1-btn1" onclick="a()" 
     class="btn btn-primary" type="button">
    Background1
  </input>
</html>

a()中,设置标记`show_grid'以激活旋转。如您所说,这有效。但是旋转是从实际时间(以毫秒为单位)得出的。您只需要使用鼠标坐标即可得出角度。

可以从变量mouseXmouseY获得鼠标坐标。

因此,如果您想通过向左或向右移动鼠标来旋转网格,请使用:

const turns = 5;
let angle = radians( mouseX / width * 2.0 * Math.PI * turns  );

并且,如果您希望上下移动鼠标来旋转网格,请使用:

const turns = 5;
let angle = radians( mouseY / height  * 2.0 * Math.PI * turns );

[hightwith包含画布的高度和高度(绘图区域),应内置在draw()方法中可以使用的变量中。

如果鼠标位于屏幕中间,则要旋转零度。您必须从鼠标坐标中减去半个屏幕尺寸。

只是一个例子,它同样适用于向下:

const turns = 5;
let angle = radians( ( mouseX - width / 2 ) / width * 2.0 * Math.PI * turns  );

以上是关于开始旋转bt。单击并通过鼠标位置进行控制的主要内容,如果未能解决你的问题,请参考以下文章

在opengl中,如何将鼠标跟随更改为鼠标单击、拖动和释放?

35three.js鼠标控制物体旋转缩放

图层旋转后KineticJS鼠标位置错误

创建Google地球,例如球体导航

Unity中实现通过鼠标对物体进行旋转平移缩放

threejs设置物体位置