PyGame में कुछ भी क्यों नहीं खींचा जाता है?
मैंने अजगर का उपयोग करके अजगर में एक नई परियोजना शुरू की है और पृष्ठभूमि के लिए मैं नीचे आधा ग्रे और शीर्ष काले रंग से भरा हुआ चाहता हूं। मैंने पहले परियोजनाओं में रेक्ट ड्राइंग का उपयोग किया है लेकिन किसी कारण से यह टूटने लगता है? मुझे नहीं पता कि मैं क्या गलत कर रहा हूं। अजीब बात यह है कि हर बार कार्यक्रम चलाने पर परिणाम अलग-अलग होता है। कभी-कभी केवल एक काली स्क्रीन होती है और कभी-कभी एक ग्रे आयत स्क्रीन के हिस्से को कवर करती है, लेकिन स्क्रीन का आधा हिस्सा कभी नहीं।
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()
जवाब
आपको डिस्प्ले अपडेट करने की आवश्यकता है। आप वास्तव में एक 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()