亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與角度一起使用時,p5.js 中的變量未定義?

與角度一起使用時,p5.js 中的變量未定義?

郎朗坤 2022-06-05 11:02:41
我正在學習 WebGL,并開始使用 p5.js 和 angular 開發 Sketch 應用程序。我在組件文件中定義了布爾變量,因此我想在繪圖函數中觸發特定函數,如橢圓、矩形、直線等。這些布爾變量由另一個組件中的按鈕管理。我收到core.js:6014 錯誤類型錯誤:無法讀取未定義的屬性“isRectangleMode”組件文件:import { Component, OnInit } from '@angular/core';import * as p5 from 'p5';import { Subscription } from 'rxjs';import { HomeService } from '../home.service';@Component({  selector: 'app-doodle-area',  templateUrl: './doodle-area.component.html',  styleUrls: ['./doodle-area.component.css']})export class DoodleAreaComponent implements OnInit {  private p5Init : any;  modeSubs : Subscription;  modeSelected : string = null;  isCircleMode : boolean = false;  isEllipseMode : boolean = false;  isRectangleMode : boolean = false;  isLineMode : boolean = false;  isPointMode : boolean = false;  isBrushMode : boolean = false;  isPenMode : boolean = false;  constructor(private homeService : HomeService) { }  ngOnInit() {    this.createCanvas();    this.homeService.modeSelected      .subscribe(modeSelected => {        this.modeSelected = modeSelected;        console.log(this.modeSelected);        if(this.modeSelected) {          this.modeReset();          if(this.modeSelected === "circle") {            this.isCircleMode = true;          } else if(this.modeSelected === 'ellipse') {            this.isEllipseMode = true;          } else if(this.modeSelected === 'rectangle') {            this.isRectangleMode = true;          } else if(this.modeSelected === 'line') {            this.isLineMode = true;          } else if(this.modeSelected === 'point') {            this.isPointMode = true;          } else if(this.modeSelected === 'brush') {            this.isBrushMode = true;          } else if(this.modeSelected === 'pen') {            this.isPenMode = true;          }        }      });  }}控制臺截圖:
查看完整描述

1 回答

?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

這是因為范圍的問題。在回調函數doodleArea內部,范圍不是組件范圍 ( this)。這里這是未定義的,我們無法訪問未定義的isRectangleMode??赡艿慕鉀Q方案是:


在 .ts 中修改createCanvas()下面給出的代碼:


private createCanvas() {

  const doodleArea = s => {

  s.setup = () => {

    let canvas = s.createCanvas(s.windowWidth - 440, s.windowHeight - 200);

    canvas.parent("doodle-area");

    s.draw = () => {

      if (this.isRectangleMode) {

        console.log("Rectangle");

      }


      s.stroke(0);

      if (s.mouseIsPressed === true) {

        s.line(s.mouseX, s.mouseY, s.pmouseX, s.pmouseY);

      }

    };

    s.keyPressed = () => {

    if (s.key === 'c') {

      window.location.reload();

    }};};

  };

  this.p5Init = new p5(doodleArea);

}

以下是相同的示例代碼:


https://stackblitz.com/edit/angular-s-p5-angular?file=src%2Fapp%2Fapp.component.ts


https://angular-s-p5-angular.stackblitz.io


希望這會有所幫助。


查看完整回答
反對 回復 2022-06-05
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號