PyGame में कुछ भी क्यों नहीं खींचा जाता है?

Dec 03 2020

मैंने अजगर का उपयोग करके अजगर में एक नई परियोजना शुरू की है और पृष्ठभूमि के लिए मैं नीचे आधा ग्रे और शीर्ष काले रंग से भरा हुआ चाहता हूं। मैंने पहले परियोजनाओं में रेक्ट ड्राइंग का उपयोग किया है लेकिन किसी कारण से यह टूटने लगता है? मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। अजीब बात यह है कि हर बार कार्यक्रम चलाने पर परिणाम अलग-अलग होता है। कभी-कभी केवल एक काली स्क्रीन होती है और कभी-कभी एक ग्रे आयत स्क्रीन के हिस्से को कवर करती है, लेकिन स्क्रीन का आधा हिस्सा कभी नहीं।

import pygame, sys
from pygame.locals import *
pygame.init()

DISPLAY=pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

जवाब

Rabbid76 Dec 03 2020 at 01:33

आपको डिस्प्ले अपडेट करने की आवश्यकता है। आप वास्तव में एक Surfaceऑब्जेक्ट पर ड्राइंग कर रहे हैं । यदि आप PyGame डिस्प्ले से संबंधित सरफेस पर आकर्षित होते हैं, तो यह डिस्प्ले में तुरंत दिखाई नहीं देता है। जब pygame.display.update()या तो डिस्प्ले अपडेट हो जाता है या तब परिवर्तन दिखाई देने लगते हैं pygame.display.flip()।

देखें pygame.display.flip():

यह संपूर्ण प्रदर्शन की सामग्री को अद्यतन करेगा।

जबकि pygame.display.flip()संपूर्ण डिस्प्ले की सामग्री को अपडेट करेगा, pygame.display.update()स्क्रीन के केवल एक हिस्से को अपडेट करने की अनुमति देता है, पूरे क्षेत्र के बजाय अद्यतन करने के लिए। सॉफ्टवेयर डिस्प्ले pygame.display.update()के pygame.display.flip()लिए एक अनुकूलित संस्करण है, लेकिन हार्डवेयर त्वरित डिस्प्ले के लिए काम नहीं करता है।

विशिष्ट PyGame एप्लिकेशन लूप में निम्न है:

  • घटनाओं को या तो संभाल लें pygame.event.pump()या pygame.event.get()।
  • इनपुट घटनाओं और समय (क्रमशः फ्रेम) पर निर्भर खेल राज्यों और वस्तुओं की स्थिति को अपडेट करें
  • संपूर्ण प्रदर्शन को साफ़ करें या पृष्ठभूमि बनाएं
  • पूरा दृश्य खींचना (सभी वस्तुओं को आकर्षित करना)
  • pygame.display.update()या तो द्वारा डिस्प्ले को अपडेट करेंpygame.display.flip()
import pygame
from pygame.locals import *
pygame.init()

DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()

run = True
while run:
    clock.tick(60)

    # handle events
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

    # clear display
    DISPLAY.fill(0)

    # draw scene
    pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

    # update display
    pygame.display.flip()

pygame.quit()
exit()

इवेंट और एप्लिकेशन लूप भी देखें