我在PaperScript中創建了兩類對象:Node
s和Line
s。每行都有一個this.nodes
屬性,該屬性是引用兩個節點對象的數組,每行一個。節點具有this.dragging
屬性,當創建節點對象時,該屬性被初始化爲false
,但在onMouseDown
事件上被設置爲true
,並且被設置回false
在onMouseUp
。這樣我就可以跟蹤節點是否意圖在某個時間點移動。嘗試從另一個對象訪問對象屬性始終返回屬性的初始值
現在我希望能夠從Line
對象中檢查其關聯節點是否在任何時間點被拖動。爲此我有一個if語句來檢查是否(this.nodes[0].dragging == true || this.nodes[1].dragging == true)
。如果這返回true,則可能會發生進一步的操作。
問題是無論我是否拖動節點,兩個this.nodes[i].dragging
都始終返回false。爲什麼會發生?特別是當我從Node
對象中檢查this.dragging
的值時,它確實會在拖動時返回正確的true值,否則返回false。
編輯包括一些代碼:
以下是我的代碼的精簡版。重要的是this.dragging
變量。
function Node(pos) {
///// Stuff
this.dragging = false;
this.node.onMouseDown = function(event) {
this.dragging = true;
// Do other stuff
}
this.node.onMouseDrag = function(event) {
if (this.dragging == true) {
// Do stuff
}
}
this.node.onMouseUp = function(event) {
// Do stuff
this.dragging = false;
}
}
以下是(的一部分)的構造函數Line對象:
function Line(p1, p2) {
this.nodes = [p1, p2];
///// Stuff
this.update = function() {
if (this.nodes[0].dragging === true || this.nodes[1].dragging === true) {
// True
} else {
// False
}
}
}
2日編輯評論者要求我如何實例化這些對象:
我實例化它們如下:
var nodeNum = 7;
var lineConnections = [{
from: 0,to: 1}
,{from: 0,to: 2}
,{from: 0,to: 3}
,{from: 0,to: 4}
,{from: 1,to: 2}
,{from: 1,to: 5}
,{from: 2,to: 3}
,{from: 2,to: 4}
,{from: 3,to: 5}
,{from: 4,to: 5}
,{from: 2,to: 5}
]
function init() {
for (var i = 0; i < nodeNum; i++) {
Nodes[i] = new Node();
}
for (var i = 0; i < lineConnections.length; i++) {
Lines[i] = new Line(Nodes[lineConnections[i].from], Nodes[lineConnections[i].to]);
}
}
init();
現場演示可在http://aronadler.com/experiment/
首先,體面的探索,但我們不能開始猜測沒有一些代碼。請發佈您的類構造函數等。如果它更復雜,JFiddle會很好的工作。 – Wobbles
最初的想法,我可能會使用===運算符進行測試,因爲== true有時可能表現錯誤,具體取決於屬性的解釋方式。 – Wobbles
我無法弄清楚如何讓我的PaperScript文件的內容在JSFiddle中工作,所以如果我將它鏈接到託管的域名就足夠了。該項目目前在http://aronadler.com/experiment/ – Aron