2015-10-08 2 views
0

Это следующий вопрос к приведенному ниже коду.
Я прокомментировал y imgPos, поэтому изображение можно перетаскивать только влево или вправо. Но вы можете перетащить изображение навсегда в любом направлении. Как вы можете поставить точку остановки, чтобы вы не могли перетащить ее дальше влево и вправо.pygame перетаскивание фонового изображения

Я попытался imgPos.clamp_ip (экран)

import pygame 
from pygame.locals import * 

pygame.display.init() 
screen = pygame.display.set_mode((800, 600)) 
img = pygame.image.load('sky.png') 

imgPos = pygame.Rect((0, 0), (0, 0)) 

LeftButton = 0 
while 1: 
    for e in pygame.event.get(): 
     if e.type == QUIT: exit(0) 
     if e.type == MOUSEMOTION: 
      if e.buttons[LeftButton]: 
       # clicked and moving 
       rel = e.rel 
       imgPos.x += rel[0] 
       #imgPos.y += rel[1] 
    screen.fill(0) 
    screen.blit(img, imgPos) 
    pygame.display.flip() 
    pygame.time.delay(30) 

ответ

0

Почему бы не просто сделать это

if e.type == MOUSEMOTION: 
    if e.buttons[LeftButton]: 
     # clicked and moving 
     rel = e.rel 
     imgPos.x += rel[0] 
     if imgPos.x < MIN_X: 
      imgPos.x = MIN_X 
     elif imgPos.x > MAX_X: 
      imgPos.x = MAX_X 

Если вы хотите, чтобы сделать это немного аккуратнее, вы можете обернуть его в pygame.Rect объект, который также облегчил бы добавление той же функциональности к imgPos.y

border = pygame.Rect(MIN_X, MIN_Y, WIDTH, HEIGHT) 

if e.type == MOUSEMOTION: 
    if e.buttons[LeftButton]: 
     # clicked and moving 
     rel = e.rel 
     imgPos.x += rel[0] 
     if imgPos.left < border.left: 
      imgPos.left = border.left 
     elif imgPos.right > border.right: 
      imgPos.right = border.right 
Смежные вопросы