Я думаю, что реальная проблема в том, что код не добавляет playerSprite
в all_sprites_list
. Если спрайта нет в этом списке, обновление спрайта и вызовы рисования не включают его. Сначала я думал, что начальное положение спрайта может быть вне экрана, поэтому я параметризовал размеры экрана и поместил спрайт посередине.
В коде вопроса также есть куча других проблем с отступами, но я думаю, что это может быть из-за вставки вопроса в SO.
Я очистил и реорганизовал код, кажется, он запускается, и нажатие влево / вправо перемещает коричневую рамку.
Я объединил оба файла, чтобы облегчить отладку, извинения.
import pygame, random
pygame.init()
BROWN = (205,192,176)
DEEPBROWN = (139,131,120)
CL = (156,102,31)
WHITE = (255,255,255)
WINDOW_WIDTH=500
WINDOW_HEIGHT=500
# Setup the pyGame window
size = (WINDOW_WIDTH, WINDOW_HEIGHT)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Adventure")
class LittleMan (pygame.sprite.Sprite):
def __init__(self, color, width, height):
super().__init__()
self.image = pygame.Surface([50, 75])
self.image.fill(CL)
self.image.set_colorkey(WHITE)
self.rect = self.image.get_rect()
self.rect.center = ( WINDOW_WIDTH//2 , WINDOW_HEIGHT//2 )
def moveRight(self, pixels):
self.rect.x += pixels
def moveLeft(self, pixels):
self.rect.x -= pixels
# Create the player sprite
playerSprite = LittleMan(CL, 200, 300)
# Add user sprite into PyGame sprites list
all_sprites_list = pygame.sprite.Group()
all_sprites_list.add(playerSprite);
clock = pygame.time.Clock()
carryOn = True
while carryOn:
# Handle user input
for event in pygame.event.get():
if event.type == pygame.QUIT:
carryOn = False
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_x: #Pressing the x Key will quit the game
carryOn=False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerSprite.moveLeft(5)
if keys[pygame.K_RIGHT]:
playerSprite.moveRight(5)
# Update and Reapint the screen
screen.fill(BROWN)
pygame.draw.rect(screen, DEEPBROWN, [55, 250, 900, 70],0)
all_sprites_list.update()
all_sprites_list.draw(screen)
pygame.display.flip()
clock.tick(60)
Класс LittleMan
не включает функцию update()
, которую обычно вызывал бы all_sprites_list.update()
. Я полагаю, вам просто не нужна эта часть.
РЕДАКТИРОВАТЬ: Дополнительные примечания к функции обновления спрайта () ~
Функция спрайта update()
вызывается pygame во время функции all_sprites_list.update()
. Таким образом, это означает, что любой спрайт, добавленный в эту группу, будет автоматически обновляться. В идеале все спрайты имеют функцию обновления, которая обрабатывает внешний вид, положение и столкновения (и т. Д.) Спрайта.
Идея этой функции заключается в том, чтобы обновлять спрайт. Итак, у вас был спрайт, который двигался, эта функция рассчитала следующую позицию и установила спрайт self.rect
. Или, возможно, этот спрайт анимирован - функция обновления установит для спрайта image
следующий кадр анимации, основанный на времени.
Очевидно, что вся эта работа может быть выполнена вне функции обновления. Но он предоставляет простой и чистый механизм программирования для механики спрайтов.
Попытка просто с помощью [XmlElement("trees")]
:
[Serializable(), XmlRoot("root")]
public class test
{
[XmlElement("trees")]
public List<string> MyProp1 = new List<string>();
public test()
{
MyProp1.Add("some text");
MyProp1.Add("some more text");
}
}
Обратите внимание, что я изменился ArrayList
кому: List<string>
очищать вывод; в 1,1, StringCollection
была бы другая опция, хотя это имеет различные правила чувствительности к регистру.
(редактирование: obsoleted - мое второе сообщение ([XmlElement]
) путь состоит в том, чтобы пойти - я оставляю это для потомства в использовании xsd.exe
)
xsd.exe
Ваш друг. Скопируйте xml, который Вы хотите в файл (foo.xml
), затем используйте:
xsd foo.xml
xsd foo.xsd /classes
Теперь читайте foo.cs
; можно использовать это или непосредственно, или только для вдохновения.
(редактирование: отрезанный вывод - не полезный больше)