質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

python pygameのエラー解決

ain_kun
ain_kun

総合スコア1

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0評価

0クリップ

454閲覧

投稿2021/12/28 13:16

前提・実現したいこと

python pygameでゲームを作成しています。グループクラス.draw(screen)で画像を表示させたいのですが実行するとエラーを図れてしまいます。エラーにはmachineにimageがないといわれているのですが、まずimageという変数を用いていないのでよくわかりません。ご協力お願い致します。

発生している問題・エラーメッセージ

AttributeError: 'machine' object has no attribute 'image'

該当のソースコード

python3

from pygame.locals import * import pygame FPS = 60 # Frame per Second 毎秒のフレーム数 LOOP=True jump=False Right=False Left=False machine_img="pilot.png" machine_img2="pilot2.png" machine_img3="pilot3.png" machine_img4="pilot4.png" target_img="monster1.png" mouse_point="mouse_point.png" class machine(pygame.sprite.Sprite): def __init__(self, x, y, vx, vy, w, h): super().__init__() self.x, self.y=(x, y) self.vx, self.vy=(vx, vy) self.w, self.h=(w, h) self.grav = 16 self.rect = pygame.Rect(self.x, self.y, self.w, self.h) self.image1 = pygame.image.load(machine_img).convert() self.image1=pygame.transform.scale(self.image1, (70, 70)) self.jump=False def LEFT(self): if 0 <= self.rect.left-10 <= 700: self.rect.move_ip(-self.vx, 0) self.image1 = pygame.image.load(machine_img3).convert() self.image1=pygame.transform.scale(self.image1, (70, 70)) def RIGHT(self): if 0 <= self.rect.right+10 <= 700: self.rect.move_ip(self.vx, 0) self.image1 = pygame.image.load(machine_img).convert() self.image1=pygame.transform.scale(self.image1, (70, 70)) def DOWN(self): if self.rect.y<=self.y+self.h/2: self.rect.move_ip(0,self.vy) class target1(pygame.sprite.Sprite): def __init__(self, x, y, vx, w, h): self.x, self.y = (x, y) self.vx = vx self.w, self.h = (w, h) self.rect=pygame.Rect(self.x, self.y, self.w, self.h) self.image2 = pygame.image.load(target_img).convert() self.image2=pygame.transform.scale(self.image2, (80, 80)) self.time=0 def draw_target1(self): self.rect=pygame.draw.rect(screen, (255, 255, 255), (self.x, self.y, 20, 30)) def move_target1(self): self.time+=1 if self.time<=30: self.rect.move_ip(self.vx, 0) elif 30<self.time<=60: self.rect.move_ip(-self.vx, 0) else: self.time=0 screen = pygame.display.set_mode((800, 450)) clock = pygame.time.Clock() own_machine=pygame.sprite.Group() own_machine.add(machine(350,300,10,10,30,40)) tar1=target1(200, 100, 1, 40, 30) mouse_x, mouse_y=(20,20) mouse_point = pygame.image.load(mouse_point).convert() mouse_point=pygame.transform.scale(mouse_point, (70, 70)) while LOOP: for event in pygame.event.get(): if event.type == pygame.QUIT: LOOP = False clock.tick(FPS) pressed_keys = pygame.key.get_pressed() for event in pygame.event.get(): if event.type == MOUSEMOTION: mouse_x, mouse_y=event.pos mouse_x -= int(mouse_point.get_width() / 2) mouse_y -= int(mouse_point.get_height() / 2) if pressed_keys[pygame.K_UP]: jump=True if pressed_keys[pygame.K_LEFT]: own_machine.LEFT() Right=False Left=True if pressed_keys[pygame.K_RIGHT]: own_machine.RIGHT() Right=True Left=False if event.type == KEYDOWN: if pressed_keys[pygame.K_DOWN]: own_machine.DOWN() own_machine.image1 = pygame.image.load(machine_img2).convert() own_machine.image1=pygame.transform.scale(own_machine.image1, (70, 70)) if Left: own_machine.image1 = pygame.image.load(machine_img4).convert() own_machine.image1=pygame.transform.scale(own_machine.image1, (70, 70)) if event.type == KEYUP: if own_machine.rect.y>=own_machine.y+10: own_machine.rect.move_ip(0,-own_machine.vy) own_machine.image1 = pygame.image.load(machine_img).convert() own_machine.image1=pygame.transform.scale(own_machine.image1, (70, 70)) if Left: own_machine.image1 = pygame.image.load(machine_img3).convert() own_machine.image1=pygame.transform.scale(own_machine.image1, (70, 70)) if jump: own_machine.rect.move_ip(0, -own_machine.grav) own_machine.grav-=1 if own_machine.grav<-16: own_machine.grav=16 jump=False screen.blit(mouse_point, (mouse_x, mouse_y)) screen.blit(tar1.image2, tar1.rect) tar1.move_target1() own_machine.draw(screen) pygame.display.flip() screen.fill((0, 0, 0)) pygame.quit()

補足情報(FW/ツールのバージョンなど)

グループクラス.draw(screen)は下から4行目で使っています。これを用いたい理由は、ゲームに表示されるオブジェクトは全てrectに画像を張り付けているのですが、画像だけでなくそのrect部分も表示されてしまうのでそれを消したいためです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。