Howdy folks, I'm back on my bullshit once again as the kids say--programming a game once more.
My issue is that I am trying to get and render text input and while it is TECHNICALLY working, it takes maybe 5-15 presses of each key to get it to log. I don't think it's input LAG so to speak as the built up key presses do not accumulate over time, they simply don't register at all. The segments of code we're looking at here can be found generically under the text rendering class and put into practice within the game loop under gamestate #2.
Any suggestions would be appreciated.
Class for clarity:
#text rendering and manipulation
class TextR():
def __init__(self, text, x, y):
self.text = text
self.x = x
self.y = y
def render(self):
rendered_text = menufont.render(self.text, False, (70, 54, 35))
gameDisplay.blit(rendered_text, (self.x - rendered_text.get_size()[0]/2, self.y - rendered_text.get_size()[1]/2))
def text_input(self):
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
self.text = self.text[:-1]
elif event.key == pygame.K_RETURN:
self.text = ""
else:
self.text += pygame.key.name(event.key)
Portion of game loop
#game loop
while not crashed:
#quit
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
print(event)
#main menu
if gamestate == 0:
#menu elements display
gameDisplay.blit(menuback, (0, 0))
gameDisplay.blit(menutextsurf, (590, 325))
menuambi.set_volume(0.1)
menuambi.play()
newgamebutton = Button("newgamebutton", "newgamebutton2", "newgamebutton", 800, 450, 0, False, False)
loadgamebutton = Button("loadgamebutton", "loadgamebutton", "loadgamebutton3", 800, 575, 1, False, False)
optionsbutton = Button("optionsbutton", "optionsbutton", "optionsbutton3", 800, 700, 1, False, False)
#new game
if (newgamebutton.mc == True) and (newgamebutton.ms == True):
gamestate = 2
#reset sounds
pygame.mixer.pause()
#load game
#options
if gamestate == 1:
aaa
#character creation
if gamestate == 2:
#reset screen
gameDisplay.fill(0)
#text
whatsyourname.render()
#text + input
nameinput.text_input()
nameinput.render()
import pygame, os
pygame.init()
pygame.mixer.init()
gameDisplay = pygame.display.set_mode((1600,900))
pygame.display.set_caption('Artificer')
clock = pygame.time.Clock()
#/
#/
#/
#/
#/
#classes
#button
class Button():
def __init__(self, file1, file2, file3, x, y, lock, mouse_hover, mouse_click):
#default image
self.file1 = pygame.image.load(os.path.expanduser("~\Desktop\Artificer\\" + file1 + ".png"))
#depressed image
self.file2 = pygame.image.load(os.path.expanduser("~\Desktop\Artificer\\" + file2 + ".png"))
#locked/greyed out image
self.file3 = pygame.image.load(os.path.expanduser("~\Desktop\Artificer\\" + file3 + ".png"))
#blit coordinates
self.x = x
self.y = y
#greyed out lock
self.lock = lock
self.ms = mouse_hover
self.mc = mouse_click
#blit default
gameDisplay.blit(self.file1, (x - self.file1.get_size()[0]/2, y - self.file1.get_size()[1]/2))
#blit greyed out
if self.lock == 1:
gameDisplay.blit(self.file3, (x - self.file3.get_size()[0]/2, y - self.file3.get_size()[1]/2))
#blit pressed/depressed
elif (pygame.mouse.get_pos()[0] < x + self.file1.get_size()[0]/2
and pygame.mouse.get_pos()[1] < y + self.file1.get_size()[1]/2
and pygame.mouse.get_pos()[0] > x - self.file1.get_size()[0]/2
and pygame.mouse.get_pos()[1] > y - self.file1.get_size()[1]/2
):
gameDisplay.blit(self.file2, (x - self.file2.get_size()[0]/2, y - self.file2.get_size() [1]/2))
self.ms = True
if pygame.mouse.get_pressed()[0] == True:
self.mc = True
#text rendering and manipulation
class TextR():
def __init__(self, text, x, y):
self.text = text
self.x = x
self.y = y
def render(self):
rendered_text = menufont.render(self.text, False, (70, 54, 35))
gameDisplay.blit(rendered_text, (self.x - rendered_text.get_size()[0]/2, self.y - rendered_text.get_size()[1]/2))
def text_input(self):
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
self.text = self.text[:-1]
elif event.key == pygame.K_RETURN:
self.text = ""
else:
self.text += pygame.key.name(event.key)
#/
#/
#/
#/
#/
#hardcoded menu stuff
menuback = pygame.image.load(os.path.expanduser("~\Desktop\Artificer\menuplaceholder.png"))
menufont = pygame.font.Font(os.path.expanduser("~\Desktop\Artificer\\bitmgothic.ttf"), 48)
menutextsurf = menufont.render('A R T I F I C E R', False, (70, 54, 35))
menuambi = pygame.mixer.Sound(os.path.expanduser("~\Desktop\Artificer\menuambienceplaceholder.ogg"))
#hardcoded character creation stuff
whatsyourname = TextR("What is your name?", 800, 450)
nameinput = TextR("", 800, 575)
#game loop stuff and game state variable
gamestate = 0
crashed = False
#/
#/
#/
#/
#/
#game loop
while not crashed:
#quit
for event in pygame.event.get():
if event.type == pygame.QUIT:
crashed = True
print(event)
#main menu
if gamestate == 0:
#menu elements display
gameDisplay.blit(menuback, (0, 0))
gameDisplay.blit(menutextsurf, (590, 325))
menuambi.set_volume(0.1)
menuambi.play()
newgamebutton = Button("newgamebutton", "newgamebutton2", "newgamebutton", 800, 450, 0, False, False)
loadgamebutton = Button("loadgamebutton", "loadgamebutton", "loadgamebutton3", 800, 575, 1, False, False)
optionsbutton = Button("optionsbutton", "optionsbutton", "optionsbutton3", 800, 700, 1, False, False)
#new game
if (newgamebutton.mc == True) and (newgamebutton.ms == True):
gamestate = 2
#reset sounds
pygame.mixer.pause()
#load game
#options
if gamestate == 1:
aaa
#character creation
if gamestate == 2:
#reset screen
gameDisplay.fill(0)
#text
whatsyourname.render()
#text + input
nameinput.text_input()
nameinput.render()
#world map
if gamestate == 3:
aaa
#local map
if gamestate == 4:
aaa
#combat
if gamestate == 5:
aaa
#loot
if gamestate == 6:
aaa
#cutsceens
if gamestate == 7:
aaa
#conversations
if gamestate == 8:
aaa
#inventory/equipment
if gamestate == 9:
aaa
#characer sheet/level up
if gamestate == 10:
aaa
#crafting***
if gamestate == 11:
aaa
#skills and spellbook
if gamestate == 12:
aaa
#journal/quests
if gamestate == 13:
aaa
#refresh & fps
pygame.display.update()
clock.tick(60)
pygame.quit()
quit()