RPGゲームなんかでは必須となる文字の描写についてやっていきたいと思います。
一番手っ取り早いのは、フォントファイルから文字を読み込んで描写することです。
(拡張子は.ttf)
デフォルトで入っている文字フォントを持ってきてもいいですし、フリーのフォントをダウンロードしてもOKです。
今回は、同じ階層にそのファイルを置いてください。
スポンサーリンク
まずは普通に文字を出力する
ソースコード
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
size=(640,480) #スクリーンサイズ
pygame.init()
screen=pygame.display.set_mode(size) #スクリーンの設定
pygame.display.set_caption("台詞を書き出す") #タイトル
font=pygame.font.Font("JKG-L.ttf",60) #フォントファイルと文字の大きさ
hello=font.render("hello",False,(255,255,255)) #出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定
while(1):
screen.fill((0,0,0))
screen.blit(hello,(0,0))
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
これでhelloという文字が0,0の場所に出力されました。
スペースを押すと次のメッセージが出力
メッセージを配列に格納してスペースを押すと次の台詞が出力されるようにします。
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
size=(640,480) #スクリーンサイズ
pygame.init()
screen=pygame.display.set_mode(size) #スクリーンの設定
pygame.display.set_caption("台詞を書き出す") #タイトル
hello=[] #配列宣言
check=0 #最初の文字
font=pygame.font.Font("JKG-L.ttf",60) #フォントファイルと文字の大きさ
hello.append(font.render("hello1回目",True,(255,255,255))) #出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定
hello.append(font.render("hello2回目",True,(255,255,255)))
hello.append(font.render("hello3回目",True,(255,255,255)))
while(1):
screen.fill((0,0,0))
screen.blit(hello[check],(0,0))
pygame.display.update()
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==KEYDOWN:
if event.key==K_SPACE: #スペースを押すとcheckに+1される
check+=1
if check==3:
sys.exit()
これでスペースを押すと次の台詞に切り替わります。
しかしこれだとメインループがごちゃごちゃになってしまうので、「台詞配列を作る」を別のファイルで作成していきます。
ファイルを分けたバージョン
メインファイル
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
import test13a #外部ファイルの読み込み、場所は同じ階層
size=(640,480) #スクリーンサイズ
pygame.init()
screen=pygame.display.set_mode(size) #スクリーンの設定
pygame.display.set_caption("台詞を書き出す") #タイトル
check=0 #最初の文字
hello=[]
font=pygame.font.Font("JKG-L.ttf",60) #フォントファイルと文字の大きさ
hello=test13a.make_text(font) #右辺を訳すと「test13aの中のmake_text()を呼び出す」、呼び出した配列をhelloに
while(1):
screen.fill((0,0,0))
screen.blit(hello[check],(0,0))
pygame.display.update()
print (check)
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==KEYDOWN:
if event.key==K_SPACE: #スペースを押すとcheckに+1される
check+=1
if check==3:
sys.exit()
サブファイル
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
def make_text(font):
textList=[]
textList.append(font.render("hello1回目",True,(255,255,255))) #出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定
textList.append(font.render("hello2回目",True,(255,255,255)))
textList.append(font.render("hello3回目",True,(255,255,255)))
return textList
さらにそれに加えて台詞そのものを別のファイルに保存してまとめておくようにします。 それがこちら
1回目ですよ~ん,2回目ですよ~ん,3回目ですよ~ん
名前はserihu.txtです。同じように階層は一緒です。
メインファイル
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
import test13a #外部ファイルの読み込み、場所は同じ階層
size=(640,480) #スクリーンサイズ
pygame.init()
screen=pygame.display.set_mode(size) #スクリーンの設定
pygame.display.set_caption("台詞を書き出す") #タイトル
check=0 #最初の文字
hello=[]
font=pygame.font.Font("JKG-L.ttf",60) #フォントファイルと文字の大きさ
hello=test13a.LoadText("serihu.txt",font).make_text(font) #右辺を訳すと「test13aの中のLoadTextの中のmake_textを呼び出す」、呼び出した配列をhelloに
while(1):
screen.fill((0,0,0))
screen.blit(hello[check],(0,0))
pygame.display.update()
print (check)
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==KEYDOWN:
if event.key==K_SPACE: #スペースを押すとcheckに+1される
check+=1
if check==3:
sys.exit()
サブファイル
#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import codecs
class LoadText:
def __init__(self,filename,font):
self.font=font
fp=codecs.open(filename,"r","utf-8-sig")
for line in fp: #fpの行のかず繰り返す
line=line.rstrip() #改行を除去
self.textdata=line.split(",") #,で区切る
fp.close()
def make_text(self,font):
textList=[]
for i in self.textdata:
print (i)
textList.append(self.font.render(str(i),True,(255,255,255))) #出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定
return textList
これでファイルに台詞をまとめておけるため、簡単に編集ができるようになりました。
まとめ
今回は一人分の台詞を格納しましたが、台詞ファイルの2行目3行目と付け加えることもできます。
そのときは、格納する配列も増やしましょう。