回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试着让一个球在一个盒子里正确的反弹,特别是处理在特定角度的角落和处理一个角落的头部。我有个问题,因为我的球总是从禁区里出来。我有一个函数,它可以告诉你我的球是否在盒子里,它可以处理角落和墙壁。代码如下:</p>
<pre><code> if ((self._x > self._Grid.getWidth()) or (self._x < 0)):
print("RandomNode:outside paramaters: x! self._x = %s , self._velx = %s" % (self._x , self._velx))
if ((self._y > self._Grid.getLength()) or (self._y < 0)):
print("RandomNode:outside paramaters: y!")
if ((self._velx + self._x) > self._Grid.getWidth()):
diff = self._Grid.getWidth()-self._x
self._velx *= -1
if (diff == 0):
self._x -= self._velx
else:
self._x+= diff
tampered = True
#print("eqn1: self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
if (self._velx + self._x < 0):
diff = self._x
self._velx *= -1
if (diff == 0):
self._x += self._velx
else:
self._x-= diff
tampered = True
#print("eqn2: self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
if ((self._vely + self._y) > self._Grid.getLength()):
diff = self._Grid.getLength()-self._y
self._vely *= -1
if (diff == 0):
self._y -= self._vely
if (tampered == True):
if ((self._velx * -1 == self._vely) or (self._velx == self._vely)):
self._x += self._velx
self._y += self._vely
#print("eqn31:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
self._x += (self._velx - diff)
self._y += self._vely
#print("eqn32:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
tampered = True
#print("eqn33:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
self._y+= diff
if (tampered == True):
if ((self._velx * -1 == self._vely) or (self._velx == self._vely)):
self._x += self._velx
self._y += self._vely
#print("eqn31:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
self._x += (self._velx - diff)
self._y += self._vely
#print("eqn32:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
tampered = True
#print("eqn33:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
if (self._vely + self._y < 0):
diff = self._y
self._vely *= -1
if (diff == 0):
self._y += self._vely
if (tampered == True):
if ((self._velx * -1 == self._vely) or (self._velx == self._vely)):
self._x += self._velx
self._y += self._vely
#print("eqn41:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
self._x += (self._velx + diff)
self._y += self._vely
#print("eqn42:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
tampered = True
#print("eqn43:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
self._y-= diff
if (tampered == True):
if ((self._velx * -1 == self._vely) or (self._velx == self._vely)):
self._x += self._velx
self._y += self._vely
#print("eqn41:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
self._x += (self._velx + diff)
self._y += self._vely
#print("eqn42:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
else:
tampered = True
#print("eqn43:self._x = %s , self._y = %s , self._velx= %s, self._vely= %s" % (self._x, self._y, self._velx, self._vely))
return tampered
</code></pre>
<p>我不知道为什么它不起作用。显然x和y是它的坐标。Velx和Vely是它的x和y速度。Tampered是一个布尔值,它阻止球正常移动,只在check内移动。在</p>
<p>这是我的问题。这个代码有什么问题?或者……有没有一个用python编写的模板,或者在任何地方,或者你曾经使用过的代码,能完成我正在尝试处理和做的事情?请随意修改代码,让我知道。任何与这个问题已经解决的链接也将是伟大的。谢谢。在</p>