मैं एक ऐनिमेशन के साथ काम कर रहा हूं जहां हर बार गेंद maxY से टकराती है, यह पिछली बार आधी ऊंचाई तक उछलती है। हालांकि जब मैंने ऐसा करने की कोशिश की, तो यह काम नहीं करेगा।

var imgBall = document.getElementById("imgBall");

var count = 0;

var dy = 2;
var dx = 1;

var ballY = imgBall.offsetTop;
var ballX = imgBall.offsetLeft;
imgBall.style.width = 50 + "px";
imgBall.style.height = 50 + "px";

var minX = 0
var maxX = 700;
var minY = 0;
var maxY = 500;

setInterval(ballAnimation, 10);

function ballAnimation() {

if ((count == 0) && (ballY == maxY)) {
    dy = dy * -1;
    count++;
}
if (ballY == maxY / 2 - imgBall.offsetWidth / 2) {
    dy = dy * -1;
}

ballY = ballY + dy;
ballX = ballX + dx;

imgBall.style.top = ballY + "px";
imgBall.style.left = ballX + "px";
}

यह वह हिस्सा है जहां यह विफल रहता है if (ballY == maxY / 2 - imgBall.offsetWidth / 2)। मैंने इसका परीक्षण करने की कोशिश की है और जब मैं if (ballY == maxY / 2) लिखता हूं तो यह पूरी तरह से ठीक काम करेगा।

2
Shinji 27 अक्टूबर 2018, 23:30

1 उत्तर

सबसे बढ़िया उत्तर

बग तार्किक प्रकृति का है, आप प्रत्येक पुनरावृत्ति पर dy (2) की वृद्धि (या कमी) ballY करते हैं। इस विशिष्ट परिदृश्य में maxY / 2 - imgBall.offsetWidth / 2 225 है, इसका मतलब है कि आप कभी भी शर्त को सत्य के रूप में पूरा नहीं करते हैं। चेक को निम्नानुसार बदलना एक त्वरित समाधान है:

ballY >= maxY / 2 - imgBall.offsetWidth / 2

== को >= के साथ बदलकर आप स्थिति को पकड़ सकते हैं, भले ही वह सीमा पार हो।

1
Marco 27 अक्टूबर 2018, 21:11