0

スプライトを動かすためにこれを作成しました。別のファイルでスプライト画像の座標を(spritex、300)に設定しました。プログラムを実行して右矢印または左矢印を押すと、動きはありません。印刷関数で、spritexの値が変更されます

印刷機能を追加して、プログラムがキー押下を読み取っていることを確認しました。プログラムの設定が間違っていませんか?


------移動機能ファイル

import pygame
import os, sys
from itertools import *
from oryxsprites import *
from oryxdisplay import *
spritex = 300
screen = pygame.display.set_mode((640, 640))

def movementsprite():   

    global spritex

    keys = pygame.key.get_pressed()

    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False

    if keys[pygame.K_RIGHT]:
              spritex += 10
              print spritex

    elif keys[pygame.K_LEFT]:              
              spritex -= 10
              print spritex

------機能ファイルの表示---------------

import pygame
import itertools
from oryxsprites import *
from McharMovement import *
screen = pygame.display.set_mode((640, 640))
spritex = 300
def backgroundmain():
    movementsprite()

    backdrop = pygame.Rect(0, 0, 640, 640) 
    screen.fill((50,50,50))
    playingfeildwidth = (32, 608)
    playingfeildheight = (32, 608)

screen.blit(warrior1, (spritex, 320))

pygame.display.flip()

--------メインファイル------------------

import pygame
import os, sys
from itertools import *
from oryxsprites import *
from oryxdisplay import *
from McharMovement import *
running = True

while running:

    backgroundmain()
    pygame.display.set_caption('OryxGame')
    pygame.display.set_icon(grasstile)


    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False
             pygame.quit()
4

2 に答える 2

0

コードを次のように変更します。

spritex = 100

def movementsprite():
    global spritex  #I added this line
    keys = pygame.key.get_pressed()
    for event in pygame.event.get():
         if event.type == pygame.QUIT:
             running = False

    if keys[pygame.K_RIGHT]:
              spritex += 10
              print spritex

    elif keys[pygame.K_LEFT]:              
              spritex -= 10

それはうまくいくはずです

スプライトがまだ動かない場合は、関数を呼び出してスプライトを動かしたときに問題が発生します。どのように動かしていますか?その移動関数を内部から呼び出す必要がありますdef movementsprite():

そして、別のファイルから移動関数を呼び出したい場合は、

from other_file import movement_func

あるいは

from other_file import *

更新: 移動関数に return ステートメントを追加するだけで、return spritex

次に、Display関数で、移動関数を呼び出すときに行を次のように変更します spritex=movementfunction()

これにより、ファイル間で spritex の値が変更されます。また、移動関数の上部でスプライトをグローバルにする必要はありません。

私が助けてくれることを願っています!:)

于 2012-05-22T19:40:54.417 に答える
0

あなたのspritex変数は、見た目からは範囲外です。関数で使用できるようにする必要がありmovementsprite()ます。

global変数宣言の前に置くと、これが解決する場合があります

于 2012-05-22T17:14:49.197 に答える