【问题标题】:p5.js Add elements to canvas that are not affected by scale() functionp5.j​​s 向画布添加不受 scale() 函数影响的元素
【发布时间】:2019-07-09 10:14:17
【问题描述】:

我正在创建一个 p5.js agar.io 风格的游戏。在我的绘图函数中,我使用 scale 函数来缩小地图,因为我的 agar.io blob 对象的半径会增大。

function draw() {
    var newzoom = 64 / blob.r;
    zoom = lerp(zoom, newzoom, 0.1);
    scale(zoom);
    ...
    show_highscores();

 }

在我的draw() 函数中,我还使用show_highscores() 函数绘制了一个标签,我将使用它来显示游戏中所有玩家的最高分。

function show_highscores() {
    textSize(12);
    text("Leaderboard", blob.pos.x - 150, blob.pos.y - 80);
    fill(0, 102, 153);
 }

问题: 由于我在 draw() 函数中运行的 scale(),我的高分标签相对于我的 blob(始终位于屏幕中间)正在改变位置和大小。

问题:

有没有办法以不受scale 函数影响的方式绘制我的高分标签。是否可以在你的画布上覆盖一个标签,或者为我的高分标签绘制一个额外的画布。

【问题讨论】:

    标签: javascript scale absolute p5.js


    【解决方案1】:

    在绘制记分卡之前,您可以在需要时使用push()pop() 函数恢复到基本比例。像这样的:

    function setup(){
      createCanvas(200, 200);
      frameRate(1);
    }
    
    function draw(){
      background(50);
      fill('white');
      stroke(255);
    
      push();
      scale(random(0.2,3));
      rect(30, 20, 50, 50);
      line(0, 0, 100, 200);
      pop();
      
      stroke(0);
      fill(255, 0, 0, 100);
      rect(30, 20, 50, 50);
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.min.js"></script>

    【讨论】:

    • 很好,这很有效。我不得不做 pop();然后 show_highscores();最后推();将我的转换更改添加回来
    • 好东西!很高兴能提供帮助。
    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 2014-11-24
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2021-12-28
    相关资源
    最近更新 更多