• 0
البندري

اظهار صورة عند الضغط على زر معين في البايثون والpygame؟

سؤال

لسلام عليكم..

أثناء تطبيقي لأحد الأمثلة يطلب مني أن أظهر صورة عند نقطة معينة وذلك عند الضغط على حرف الـS مثلاً

واظهارها عند نقطة أخرى عند الضغط على حرف الـD مثلاً..

المشكلة لدي هو أن الصورة تظهر ولاتختفي بعد ذلك، مع أنني أضفت أمر ملئ الشاشة بلون الخلفية عند بداية كل while loop

ولم أفلح!

ثم حاولت بعد ذلك رسم مستطيل بنفس أبعاد الصورة بنفس موضع الصورة الأخرى (ليتم مسحها) وأيضاً لم تنجح الطريقة،

هل من نصائح؟

وجزاكم الله خيراً..


import sys,pygame
from pygame.locals import *

pygame.init()

w=pygame.display.set_mode((468,360))
run=1


b="ball.gif"
# loading the image
ball=pygame.image.load(b).convert_alpha()

# a function to return the surface size
size=ball.get_size()

# assigning False to the buttons state before hitting them
# and later you will see that once I press them their state
# will be TRue
s_state=False
d_state=False

while run:
w.fill((0,0,0))

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

if event.type==KEYDOWN:
if event.key==K_s: #the 's' button
s_state=True
#print event.key

elif event.key==K_d: # the 'd' button
d_state=True
#print event.key

if s_state:
#pygame.draw.rect(w,(0,0,0),Rect(size,(35,40)))
w.blit(ball,(0,0))

if d_state:
#pygame.draw.rect(w,(0,0,0),Rect(size,(0,0)))
w.blit(ball,(100,100))

pygame.display.flip()

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

5 إجابة على هذا السؤال .

  • 0

لاحظت بأن الكود يحتاج إلى تعديل (لأنني حاولت اختصاره حتى تكون المشكلة واضحة للقراء)..

فقط أحتاج تعديل الكومنتس..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل من مساعدة؟

تم تعديل بواسطه البندري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تفضل


import sys
import pygame
from pygame.locals import *

def write(msg="pygame is cool"):
myfont = pygame.font.SysFont("Arial", 16)
mytext = myfont.render(msg, True, (250,250,200))
mytext = mytext.convert_alpha()
return mytext

pygame.init()
screen=pygame.display.set_mode((468,360))
b="ball.gif"

ball=pygame.image.load(b).convert_alpha()

background = pygame.Surface((screen.get_width(), screen.get_height()))

run = 1
while run:

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

if event.type==KEYDOWN:
if event.key==K_s: #the 's' button
screen.blit(ball,(0,0))
if event.key==K_d: # the 'd' button
screen.blit(background,(0,0))
screen.blit(write("Press S to Show and D to Remove :/ "),(5,200))
pygame.display.flip()



0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الأخ ihope:

جزاكم الله خيراً على تعاونك..

ولكن ربما لم أظهر الغرض من البرنامج بشكل واضح، حيث أنني كنت أريد أن تظهر الصورة عند الضغط على حرف الـs عند احداثي معين،

وعند الضغط على حرف الـd تظهر الصورة عند احداثي آخر، وتختفي الصورة التي ظهرت عند الضغط على حرف الـs، والعكس..

ولكني استفدت من التعديل الذي قمت به، فأضفت أمر ملئ الشاشة قبل حرف الs وقبل حرف الـd حتى تظهر أو تختفي الصورة بحسب الشرط..

مع ذلك ظلت لدي مشكلة استطعت حلها، وأيضاً تساؤل:

المشكلة:

ماذا إذا أردت أن تختفي الصورة فقط، وليس كل الشاشة لوجود كائنات أخرى أحتاج إلى إظهارها دائماً بعد تحقيق الشرط مثلاً..

لحل ذلك، جعلت المتغير (background) يرجع لي أبعاد الصورة وليس الـscreen

وأضفت الأمر بملئ منطقة الصورة بلون الخلفية عند تحقيق شرط الضغط على الs والd

(أرفقت التعديل)

التساؤل:

لماذا لم تعمل فكرة أن يرجع لي الbutton state، أحد القيمتين True or False

ثم يقوم برسم الصورة بناء على القيمة المرجعة؟؟

بارك الله فيكم..

import sys
import pygame
from pygame.locals import *

def write(msg="pygame is cool"):
myfont = pygame.font.SysFont("Arial", 14)
mytext = myfont.render(msg, False, (250,250,200))
mytext = mytext.convert_alpha()
return mytext

pygame.init()
screen=pygame.display.set_mode((468,360))
b="images.jpg"

ball=pygame.image.load(b).convert_alpha()

background = pygame.Surface((ball.get_width(), ball.get_height()))

run = 1
while run:

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

if event.type==KEYDOWN:
if event.key==K_s: #the 's' button
screen.blit(background,(250,200))
screen.blit(ball,(0,0))
if event.key==K_d: # the 'd' button
screen.blit(background,(0,0))
pygame.draw.rect(screen,(255,0,0),(380,60,50,50))
screen.blit(ball,(250,200))
screen.blit(write("Press s to show it in the top-left corner and d to show it in another coordinate :/ "),(5,200))
pygame.display.flip()

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنتظر اجاباتكم..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .