Найти - Пользователи
Полная версия: Что происходит с pygame?
Начало » Python для новичков » Что происходит с pygame?
1
Carzil
main.py
#!/usr/bin/python
import pygame
import libsww
window = ""
def init_window():
global window, s
pygame.init()
window = pygame.display.set_mode((640, 800))
pygame.display.set_caption("Sinbot Worlds War")
bitmap = pygame.image.load("./data/fons/one.bmp").convert()
window.blit(bitmap, (0, 0))
pygame.key.set_repeat(2, 50)
#pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
s = libsww.Model(window, 0, 0, "hear")
pygame.display.update()
s.show()
def main():
global window, s
init_window()
x = 0
y = 0
while True:
for i in pygame.event.get():
if i.type == pygame.QUIT:
exit(0)
elif i.type == pygame.KEYDOWN and i.key == pygame.K_LEFT:
s.set(s.x - 10, s.y)
s.show()
elif i.type == pygame.KEYDOWN and i.key == pygame.K_RIGHT:
s.set(s.x + 10, s.y)
s.show()
elif i.type == pygame.KEYDOWN and i.key == pygame.K_UP:
s.set(s.x, s.y - 10)
s.show()
elif i.type == pygame.KEYDOWN and i.key == pygame.K_DOWN:
s.set(s.x, s.y + 10)
s.show()
pygame.display.update()

if __name__ == '__main__':
main()
libsww.py:
#!/usr/bin/python
import pygame
# Graphic
class Model:
def __init__(self, wind, xpos, ypos, name):
self.x = xpos
self.y = ypos
self.window = wind
self.bitmap = pygame.image.load("./data/models/" + name + ".swwm").convert()
self.bitmap.set_colorkey((255, 255, 255))
def set(self, xpos, ypos):
self.x = xpos
self.y = ypos
#def moveUP(self):
# def moveLEFT(self):
#def moveDOWN(self):
#def moveRIGHT(self):
def show(self):
pygame.display.flip()
self.window.blit(self.bitmap, (self.x, self.y), None, pygame.BLEND_MIN)
# Phisic
def Intersect():
if (s1_x > s2_x - 32) and (s1_x < s2_x + 32) and (s1_y > s2_y - 32) and (s1_y < s2_y + 32):
return True
else:
return False
Собственно сабж:
когда нажимаешь кнопки, объект двигается, но оставляет за собой след:

И ещё вопрос: можно ли в pygame сделать поле для ввода текста?
И ещё один: как стереть нарисованную линию?
Ferroman
А почему Вы surface рисуете, а не делаете спрайт и двигаете его Rect? Вы же, фактически, на каждом вызове show рисуете новую картинку, а не двигаете старую.
Carzil
А как правильно сделать? Просто, у меня со спрайтами не получилось.
Ferroman
Там действительно всё не очевидно, но довольно просто.
Вот тут более-менее понятное описание и код: http://muagames.com/tutorials/pygame-3-pong/pygame-3-pong-step-1/

Вкратце:
1. Создаёте класс-наследник Sprite
2. Переопределяете его init и update. В ините присваивайте self.image - нужную картинку, а в self.rect - её rect.
3. В главном цикле игры манипулируете уже спрайтом (сделайте какой-то метод, в котором и обновляйте координаты self.rect так, как вам нужно, и вызывайте его в update методе)
4. В том же цикле вызывайте ваш_спрайт.draw(screen) и display.flip.
Carzil
Спасибо. И ещё вопрос: можно ли в pygame сделать поле для ввода текста?
Carzil
Ура! Две задачи из трёх решил: про спрайты и про поле для ввода! Чтобы в pygame сделать поле для ввода, нужно нарисовать поле для ввода. Далее отлавливать клавиши: если shift_mode накладываем заглавную букву на картинку, если нет - то маленькую. Курсор можно обозначать знаком “|”. Собственно осталась одна задача: как стереть нарисованную линию?
maxwell
Carzil
Ура! Две задачи из трёх решил: про спрайты и про поле для ввода! Чтобы в pygame сделать поле для ввода, нужно нарисовать поле для ввода. Далее отлавливать клавиши: если shift_mode накладываем заглавную букву на картинку, если нет - то маленькую. Курсор можно обозначать знаком “|”. Собственно осталась одна задача: как стереть нарисованную линию?
Я не знаком с pygame, но как вариант — нарисовать поверх линию цвета фона.
Ferroman
Если фон не сплошной - то так просто не получится.
А ответ тут: http://stackoverflow.com/questions/4276342/python-pygame-how-can-i-delete-a-line
Carzil
А ссылку в точке обязательно нужно было делать? =)
Ferroman
Это урод-сеошник, не обращайте внимания.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB