2017-05-23 17 views
0

私は現在、PyGameでPyOpenGLを使用して、トップダウンの2Dサイドスクロール用のコードを記述しています。1つの2Dイメージを別のイメージに重ねますか? PyOpenGL?

次のコードは、ウィンドウ内に2D画像を生成します。

追加される画像は背景です。 OpenGLを使用して背景にスプライトを追加したいと思います。言い換えれば、1つの2D画像を別の画像の上に重ねる必要があります。私はこれを行う良い方法を見つけることができないようです。

import pygame 
from pygame.locals import * 
from OpenGL.GL import * 
from OpenGL.GLU import * 
from screenDictionary import * 

### Initialize variables ### 
gameOn = True 
dispWidth = 1920 
dispHeight = 1024 
bgImg = 'A1_64.png' 
bgImg2 = 'HookedFront64.png' 
transTuple = (255, 0, 255) 
blackTuple = (100, 100, 100) 
screenX = 0 
screenY = 0 

### Initialize display ### 
def createDisplay(dispWidth, dispHeight): 
    pygame.init() 
    screen = pygame.display.set_mode((dispWidth, dispHeight), DOUBLEBUF|OPENGL) 
    pygame.display.set_caption('Hooked') 
    return screen 

def createSurfaces(screen): 
    background = pygame.Surface(screen.get_size()) 
    background.fill(blackTuple) 
    sprite = pygame.Surface(screen.get_size()) 
    sprite.set_colorkey(transTuple) 
    return background 

def loadScene(bgImg): 
    img = pygame.image.load(bgImg) 
    textureData = pygame.image.tostring(img, "RGB", 1) 
    width = img.get_width() 
    height = img.get_height() 
    bgImgGL = glGenTextures(1) 
    glBindTexture(GL_TEXTURE_2D, bgImgGL) 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData) 
    glEnable(GL_TEXTURE_2D) 

def placeScene(): 
    glLoadIdentity() 
    gluPerspective(90, 1, 0.05, 100) 
    glTranslatef(0,0,0) 
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 
    glBegin(GL_QUADS) 
    glTexCoord2f(0,0) 
    glVertex3f(-4,-4,-4) 
    glTexCoord2f(0,1) 
    glVertex3f(-4,4,-4) 
    glTexCoord2f(1,1) 
    glVertex3f(4,4,-4) 
    glTexCoord2f(1,0) 
    glVertex3f(4,-4,-4) 
    glEnd()  

screen = createDisplay(dispWidth, dispHeight) 
background = createSurfaces(screen) 
mapParams = screenDictionary(screenX, screenY) 
bgImg = mapParams[0] 
loadScene(bgImg) 
loadScene(bgImg2) 
loadScene(bgImg) 

###Run the game### 
while gameOn: 
    placeScene() 
    pygame.display.flip() 
    pygame.time.wait(1) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      gameOn = False 
+0

ようこそ。この[how-to-ask](http://stackoverflow.com/help/how-to-ask)を読んでそこのガイドラインに従って、プログラミングを記述するコードやエラーメッセージなどの追加情報を使用して質問を洗練してください問題。 – thewaywewere

+0

なぜGLを使用していますか?私もそれをしましたが、3Dのためだけでした。しかし、私はあなたが2Dを望んでいると思うので、glVertex2fと注文数を使うことができます。 – user7185318

+0

ハードウェアアクセラレーション機能のためにGLを選択しました。 OpenGLの代替案をお勧めしますか? –

答えて

0

問題を解決しました。

変更内容:gluPerspectiveの代わりにgluOrtho2Dを使用しました。 glVertex3fの代わりにglVertex2fを使用しました。

最も重要な変更:削除にglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) これはDUH ...シーン、それが実行されたすべての時間をクリアしました!まだOpenGLを学んでいますが、他の誰かが私のような気がなく、同様の問題に遭遇した場合に備えて、ここに残しておきます。

関連する問題