2016-09-01 22 views
1

UPDATED ISSUEpygameのフルスクリーン表示フラグが画面に対して大きすぎるゲーム画面を作成します

問題は、私は、ウィンドウを作成するためにFULLSCREEN表示フラグを使用していたという事実であるように思われる私を発見しました。私はスクリー(0、0)の左上に描かれる矩形を追加しましたが、私がプログラムを実行すると、ほとんど画面外です。その後Alt-Tabを押して戻すと、長方形が0,0に適切に配置され、タレットが中心から外れます。

基本的に、プログラムが起動すると、ゲーム画面は実際の画面よりも大きくなりますが、中央に表示されます。その後、Alt-Tabの後、ゲーム画面は0,0で整列されますが、ゲーム画面が自分の画面よりも大きいので、タレットは中心から外れて見えますが、実際にはゲームの中心に配置されます。

実際の質問は、FULLSCREEN表示フラグを使用すると、画面がコンピュータの画面よりも大きくなるのはなぜですか?

私はそれがどこにある発射するかのようにカーソルの位置を次の画面の中央にタレットの簡単なデモを構築してい

当初発行。 Alt-Tabを押して画面を離れ、Alt-Tabを押すまで、すべてが完全に機能します。この時点でタレットは現在中心から外れています(下方向と右方向)

import pygame, math 
pygame.init() 

image_library = {} 

screen_dimen = pygame.display.Info() 
print("Screen Dimensions ", screen_dimen) 

def get_image(name): 
    if name not in image_library: 
     image = pygame.image.load(name) 
     image_library[name] = image 
    else: 
     image = image_library[name] 
    return image 

robot_turret_image = get_image('robot_turret.png') 

screen = pygame.display.set_mode((0, 0), pygame.`FULLSCREEN`) 

done = False 

clock = pygame.time.Clock() 

while not done: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      done = True 
     if event.type == pygame.MOUSEMOTION: 
      print(event.pos) 
     if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: 
      done = True 

    screen.fill((0, 0, 0)) 
    pos = pygame.mouse.get_pos() 
    angle = 360 - math.atan2(pos[1] - (screen_dimen.current_h/2), 
          pos[0] - (screen_dimen.current_w/2)) * 180/math.pi 
    rot_image = pygame.transform.rotate(robot_turret_image, angle) 
    rect = rot_image.get_rect(center=(screen_dimen.current_w/2, screen_dimen.current_h/2)) 

    screen.blit(rot_image, rect) 

    color = (0, 128, 255) 
    pygame.draw.rect(screen, color, pygame.Rect(0, 0, 200, 200)) 

    pygame.display.update() 
    clock.tick(60) 

センターがオフになっているようです。私は、Alt-Tabの前と後の画面の寸法をプリントアウトしていて、同じものなので、イメージがなぜ動くのか理解できません。私は、Pygameの状態変化に関する何かを見逃していると思いますが、何が分からないのでしょうか。それが関連している場合は、私は、Windows 10

+0

私はWindows 7でpygame 1.9.2b1(Python 3.4.2)で問題を再現しようとしましたが、できませんでした。どのバージョンのPythonとPygameを使用していますか? –

+0

私はpython 3.5.1とpygame 1.9.2a0を使用しています – The4thIceman

答えて

0

よしの午前、私はgamedev.stackexchange

から解決策を発見し、私はここでそれを再ハッシュします。問題は、フルスクリーンタグを使用すると画面が自分のコンピュータ画面よりも大きくなっていたことです。次のコードは、この

import ctypes 
ctypes.windll.user32.SetProcessDPIAware() 
true_res = (ctypes.windll.user32.GetSystemMetrics(0), ctypes.windll.user32.GetSystemMetrics(1)) 
pygame.display.set_mode(true_res,pygame.FULLSCREEN) 

を解決潜在的にちょうど窓は修正が、私はそれをテストすると、別のシステムを持っていないことに注意することが重要です。しかし、Windows 10ではpython 3.5.1とpygame 1.9.2a0で動作します

関連する問題