问题描述
我正在尝试制作具有许多平台级别的游戏。我想知道如何对所有角度进行碰撞检测。在我的代码中,当我在平台的两侧发生碰撞时,它会让我的玩家进入平台,但我希望它不会产生这种效果并使其无法通过它。此外,当我与平台底部相撞时,我的角色会通过它而不是碰撞。 这是我的完整代码:
import pgzrun
import time
z = 0
x = 0
HEIGHT = 10000
WIDTH = 1000
Height = 700
Width = 700
xspeed = 3
yspeed = 3
x = 10
y = 10
x_change = 0
y_change = 0
old_x = x
old_y = y
fps = (30)
platforms = []
score = 0
gravity = 5
platform1 = ZRect((0,1100),(200,10))
platform2 = ZRect((400,1050),(50,10))
platform3 = ZRect((600,1000),10))
platform4 = ZRect((800,900),10))
platform5 = ZRect((500,850),10))
platform6 = ZRect((250,500),10))
platform7 = ZRect((0,300),10))
platform8 = ZRect((800,200),10))
alien = Actor("alien")
diamond = Actor("diamond_s")
alien.y = 400
alien.yspeed = 0
diamond.x = 900
diamond.y = 150
def draw():
screen.draw.filled_rect(platform1,(255,255,255))
screen.draw.filled_rect(platform2,255))
screen.draw.filled_rect(platform3,255))
screen.draw.filled_rect(platform4,255))
screen.draw.filled_rect(platform5,255))
screen.draw.filled_rect(platform6,255))
screen.draw.filled_rect(platform7,255))
screen.draw.filled_rect(platform8,255))
alien.draw()
diamond.draw()
if z == 1:
screen.draw.text("You Win",(400,100),fontsize = 100)
def update():
if platform5.y > 550:
platform5.y -= 1
if platform5.y == 550:
for i in range(300):
platform5.y += 1
if platform7.x < 498:
platform7.x += 3
if platform7.x == 498:
for i in range(498):
platform7.x -= 1
if alien.top <= 1500:
global xspeed,yspeed,Width,Height,score,gravity,z
if alien.colliderect(platform1):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform1.top - 0
if (platform1.collidepoint(alien.right,alien.bottom) or platform1.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform1.collidepoint(alien.right,alien.top) or platform1.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform1.collidepoint(alien.left,alien.top) or platform1.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform2):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform2.top + 1
if (platform2.collidepoint(alien.right,alien.bottom) or platform2.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform2.collidepoint(alien.right,alien.top) or platform2.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform2.collidepoint(alien.left,alien.top) or platform2.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform3):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform3.top + 1
if (platform3.collidepoint(alien.right,alien.bottom) or platform3.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform3.collidepoint(alien.right,alien.top) or platform3.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveleft = False
elif (platform3.collidepoint(alien.left,alien.top) or platform3.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveright = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform4):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform4.top + 1
if (platform4.collidepoint(alien.right,alien.bottom) or platform4.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform4.collidepoint(alien.right,alien.top) or platform4.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform4.collidepoint(alien.left,alien.top) or platform4.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform5):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform5.top + 1
if (platform5.collidepoint(alien.right,alien.bottom) or platform5.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform5.collidepoint(alien.right,alien.top) or platform5.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform5.collidepoint(alien.left,alien.top) or platform5.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform6):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform6.top + 1
if (platform6.collidepoint(alien.right,alien.bottom) or platform6.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform6.collidepoint(alien.right,alien.top) or platform6.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform6.collidepoint(alien.left,alien.top) or platform6.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform7):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform7.top + 1
if (platform7.collidepoint(alien.right,alien.bottom) or platform7.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform7.collidepoint(alien.right,alien.top) or platform7.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform7.collidepoint(alien.left,alien.top) or platform7.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
if alien.colliderect(platform8):
alien.yspeed = 0
collide = True
alien.isJump = False
gravity = 1
alien.bottom = platform8.top + 1
if (platform8.collidepoint(alien.right,alien.bottom) or platform8.rect.collidepoint(alien.left,alien.bottom)):
alien.moveright = True
alien.moveleft = True
if (platform8.collidepoint(alien.right,alien.top) or platform8.collidepoint(alien.right,alien.bottom - 0.0001)):
alien.moveright = False
elif (platform8.collidepoint(alien.left,alien.top) or platform8.collidepoint(alien.left,alien.bottom - 0.0001)):
alien.moveleft = False
if keyboard.up:
alien.yspeed = -30
alien.y += alien.yspeed
else:
alien.moveright = True
alien.moveleft = True
gravity = 2
alien.yspeed += gravity
alien.y += alien.yspeed
score += 1
if keyboard.left:
alien.x -= 10
if keyboard.right:
alien.x -= -10
if alien.colliderect(diamond) == True:
z = z + 1
diamond.x = 100000
diamond.y = 100000
screen.draw.text("You Win",(0,0))
print(z)
if alien.top >= 1500:
alien.y = 400
alien.x = 0
screen.clear()
screen.clear()
pgzrun.go()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)