Skip to main content

Python Pygame Physics Simulation Collison Not Working [duplicate]

I am trying to make a physics simulation using pygame but the collision is having problems. It gets shaky whenever there is a collision with another block because gravity is applied, but Rect collision only works when it is a pixel or more.

I tried to make it so gravity = 0 for every block when it collides at a slow enough velocity, but that causes the blocks to hover due to certain collisions.

Sorry for the whole file I do not even know where to start to fix my problem.

import pygame
import math
# pygame setup
pygame.init()
screen = pygame.display.set_mode((1280, 720))
clock = pygame.time.Clock()
running = True
dt = 0
swap = 1
enemy_rect = pygame.Rect(500,500,20,20)
objects= [[600,300,20,20,0,1.57,10,'blue',.2]]
object=pygame.draw.rect(screen, 'blue', (600,300,20,20))
walls= [[0,700,1300,99999,0,0,99999]]#,[200,300,100,200]]
while running:
    # poll for events
    # pygame.QUIT event means the user clicked X to close your window
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            pos = pygame.mouse.get_pos()
            if pygame.mouse.get_pressed()[0]:
                temp = [pos[0],pos[1],20,20,0,1.57,10,'blue',.2]
                objects.append(temp)
            if pygame.mouse.get_pressed()[2]:
                temp = [pos[0],pos[1],80,10,0,1.57,20,'red',.2]
                objects.append(temp)
            if pygame.mouse.get_pressed(5)[4]:
                temp = [pos[0],pos[1],60,60,0,1.57,200,'yellow',.2]
                objects.append(temp)
    # fill the screen with a color to wipe away anything from last frame
                
    screen.fill("white")

    keys = pygame.key.get_pressed()
    for y in objects:
        y[4]=y[4]+y[8]
        if not keys[pygame.K_w]:
            new_x = y[0] + (y[4]*math.cos(y[5]))
            new_y = y[1] + (y[4]*math.sin(y[5]))
            y[0]=new_x
            y[1]=new_y
        object=pygame.draw.rect(screen, y[7], y[0:4])
        for x in objects:
            if pygame.Rect.colliderect(object,x[0:4]):
                if not x[0:4]==y[0:4]:
                    y[8]=.2
                    x[8]=.2
                    #if y[4]>-.3 and y[4]<0:
                        #y[4]=0
                        #y[8]=0
                    if y[1]<x[1]:
                        y[1]=x[1]-y[3]
                    else:
                        y[1]=x[1]+y[3]
                    p_added = (y[6]*y[4])+(x[6]*x[4])
                    vf1 = (p_added-x[4]-(y[6]*y[4]))/(2*y[6])
                    vf2 = ((y[6]*y[4])/x[6])+x[4]-((y[6]*vf1)/x[6])
                    y[4] = vf1
                    x[4] = vf2
                    print(y[4],x[4])
                    if y[4]>-.65 and y[4]<.2 and x[4]>-1 and x[4]<1:
                        y[4]=0
                        y[8]=0
                    if x[4]>-.65 and x[4]<.2 and y[4]>-1 and y[4]<1:
                        x[4]=0
                        x[8]=0
        for x in walls:
            wall=pygame.draw.rect(screen, "grey", x[0:4])
            if pygame.Rect.colliderect(object,wall):
                y[1]=x[1]-y[3]
                y[4]=-(y[4]*.3)
                if y[4]>-.3 and y[4]<0:
                    y[4]=0
                    y[8]=0
                #object=pygame.draw.rect(screen, y[7],y[0:4])
    # flip() the display to put your work on screen
    pygame.display.flip()

    # limits FPS to 60
    # dt is delta time in seconds since last frame, used for framerate-
    # independent physics.
    dt = clock.tick(60) / 1000

pygame.quit()


source https://stackoverflow.com/questions/77884130/python-pygame-physics-simulation-collison-not-working

Comments

Popular posts from this blog

Prop `className` did not match in next js app

I have written a sample code ( Github Link here ). this is a simple next js app, but giving me error when I refresh the page. This seems to be the common problem and I tried the fix provided in the internet but does not seem to fix my issue. The error is Warning: Prop className did not match. Server: "MuiBox-root MuiBox-root-1" Client: "MuiBox-root MuiBox-root-2". Did changes for _document.js, modified _app.js as mentioned in official website and solutions in stackoverflow. but nothing seems to work. Could someone take a look and help me whats wrong with the code? Via Active questions tagged javascript - Stack Overflow https://ift.tt/2FdjaAW

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console