Почему мой мяч при движении проваливается сквозь вращающееся тело?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой мяч при движении проваливается сквозь вращающееся тело?

Сообщение Anonymous »

Я пытаюсь создать физическую симуляцию мяча, движущегося по структуре, напоминающей качели, в Python, используя модули pymunk и pygame.

Код: Выделить всё

import pymunk
from pymunk import pygame_util
import pygame
import math

WIDTH, HEIGHT = 1000, 800
window = pygame.display.set_mode((WIDTH, HEIGHT))

def draw(space, window, draw_options):
window.fill("white")
space.debug_draw(draw_options)
pygame.display.update()

def create_walls(space, width, height):
boundary = [
[(width/2, height-10), (width, 20)],
[(width/2, 10), (width, 20)],
[(10, height/2), (20, height)],
[(width-10, height/2), (20, height)]
]

for pos, size in boundary:
body = pymunk.Body(body_type = pymunk.Body.STATIC)
body.position = pos
shape = pymunk.Poly.create_box(body, size)
shape.color = (0, 0, 0, 100)
shape.elasticity = 0.5
shape.friction = 0.4
space.add(body, shape)

def create_swing(space):
rotation_body = pymunk.Body(body_type = pymunk.Body.KINEMATIC)
rotation_body.position = (500, 600)
body = pymunk.Body()
body.position = (500, 600)
rotation_body.angular_veocity = 0.5

swing = pymunk.Segment(body, (-250, 0), (250, 0), 6)
wall1 = pymunk.Segment(body, (-250, 0), (-250, -70), 5)
wall2 = pymunk.Segment(body, (250, 0), (250, -70), 5)
swing.color = wall1.color = wall2.color = (0, 0, 0, 100)
wall1.friction = wall2.friction = swing.friction = 0.5

wall1.mass = wall2.mass = swing.mass = 30
hinge = pymunk.PivotJoint(rotation_body, body, (500, 600))
s = pymunk.SimpleMotor(rotation_body, body, 0.1)
hinge.color = (255, 0, 0, 100)
space.add(swing, body, rotation_body, hinge, wall1, wall2)
return swing

def create_ball(space, radius, mass):
body = pymunk.Body()
body.position = (600, 300)
shape = pymunk.Circle(body, radius)
shape.mass = mass
shape.color = (255, 0, 0, 100)
shape.elasticity = 0.9
shape.friction = 0.4
space.add(body, shape)
return shape

def run(window, width, height):
play = True
clock = pygame.time.Clock()
fps = 60
space = pymunk.Space()
space.gravity = (0, 981)

draw_options = pymunk.pygame_util.DrawOptions(window)

ball = create_ball(space, 30, 10)
create_walls(space, WIDTH, HEIGHT)
swing = create_swing(space)
pointer_body = pymunk.Body(body_type=pymunk.Body.KINEMATIC)
space.add(pointer_body)

while play:
for event in pygame.event.get():
if event.type == pygame.QUIT:
play = False
break

elif event.type == pygame.MOUSEBUTTONDOWN:
ball.body.apply_impulse_at_local_point((10000, 1000), (0,0))

elif event.type == pygame.MOUSEMOTION:
mouse_pos = pymunk.pygame_util.get_mouse_pos(window)
pointer_body.position = mouse_pos
swing.body.angle = (pointer_body.position-swing.body.position).angle

draw(space, window, draw_options)
space.step(1/60)
clock.tick(fps)

run(window,  WIDTH, HEIGHT)
Я настроил его так, чтобы мои качели могли менять свой угол в зависимости от координат указателя мыши. Мяч остается на качелях при появлении (если качели не перемещаются). Как только я перемещаю мышь и меняю ее угол, шарик проваливается сквозь качели. Как это исправить, чтобы мяч продолжал двигаться по качелям, а не сквозь них?

Подробнее здесь: https://stackoverflow.com/questions/790 ... when-moved
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заставить мяч вести себя как подпрыгивающий и упругий мяч?
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Чувствительность камеры к вращению сильно различается, когда твердое тело находится в движении.
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Спрайт движется с безумной скоростью и проваливается сквозь объекты в 2D-игре Unity
    Anonymous » » в форуме C#
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Мой робот проваливается под землю в мире беседок
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Почему рукопожатие TLS проваливается в приложении Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»