Mistähän mahtaa johtua että pygame piirtää joskus tekstejä eri kohtiin? Siis eri tietokoneilla ja myös käyttöjärjestelmillä näyttää olevan eroja.
Eli jos säätää tekstit näkymään oikein esim linuxilla saattaa toisella koneella tekstit piirtyä taas hieman eri tavalla.
Resoluution ym vaihto ei vaikuta asiaan.
Vikaa on vaikea korjata koska jos kalibroin tekstit piirtymään oikeaan kohtaan piirtyy ne toisella koneella taas väärin.
Ja vika on nimenomaan teksteissä ei esimerkiksi kuvissa.
Ohjelmointiputkaan ei voi liittää kuvankaappausta mutta alhaalla koodinpätkä jossa vika esiintyy. Nuo kordinaatiston kirjaimet piirtyvät liian leveästi.
import pygame #testiohjelma pygame.init() #alustetaan pygame moduuli naytto = pygame.display.set_mode((900, 700)) #luodaan ikkuna pygame.display.set_caption("Laivanupotus") #nimetään ikkuna def ruudukko(naytto): ''' Pygamea hyödyntävä funktio joka piirtää ruudukon ''' fontti = pygame.font.SysFont("arial", 32) #ladataan fontti kirjaimet = fontti.render(" a b c d e f g h i j", True, (0, 0, 0)) #luodaan tekstiä vastaava kuva teksti = fontti.render("Pelaajan laivat", True, (0, 0, 0)) #luodaan tekstiä vastaava kuva teksti2 = fontti.render("Vihollisen laivat", True, (0, 0, 0)) #luodaan tekstiä vastaava kuva laatikko = 40 #laatikon koko for x in range(40, 440, laatikko): #mistä mihin ruudukko pirretään levyssuunnassa for y in range(40, 440, laatikko): #pystysuunnassa rect = pygame.Rect(x, y, laatikko, laatikko) pygame.draw.rect(naytto, (255,255,255), rect, 1) #piirretään toinen ruudukko for x in range(480, 880, laatikko): #mistä mihin ruudukko pirretään levyssuunnassa for y in range(40, 440, laatikko): #pystysuunnassa rect = pygame.Rect(x, y, laatikko, laatikko) pygame.draw.rect(naytto, (255,255,255), rect, 1) ######################### #piirtää kordinaatiston naytto.blit(kirjaimet, (40, 0)) #piirtää kirjaimet for i in range(1,11): #piirtää numerot numero = fontti.render(str(i), True, (0,0,0)) naytto.blit(numero, (5, i * 40)) #piirtää numerot #piirretään toisenkin ruudunkon ympärille kirjaimet ja numerot naytto.blit(kirjaimet, (480, 0)) #piirtää kirjaimet for i in range(1,11): #piirtää numerot numero = fontti.render(str(i), True, (0,0,0)) naytto.blit(numero, (445, i * 40)) #piirtää numerot naytto.blit(teksti, (50, 450)) #piirtää teksti naytto.blit(teksti2, (480, 450)) #piirtää teksti2 while True: #pääsilmukka naytto.fill((77,136,255)) #asetetaan taustan väri ruudukko(naytto) #kutsuu funktiota pygame.display.flip() #päivittää näytön
Onko muilla ollut vastaavaa ongelmaa tai onko siihen olemassa mitään järkevää ratkaisua?
No mua ainakin hämää tää kohta:
a karppinen kirjoitti:
fontti = pygame.font.SysFont("arial", 32)
Mistä tiedät että koneella on arial -fontti?
Mistä tiedät että jokaisella koneella oleva "arial" niminen fontti on esimerkiksi leveydeltään sama?
No, ehkäpä toimitat tuon fontin pelin mukana, ja käyttäjä asentaa sen :hmm
Ja ihmettelen myös tätä:
a karppinen kirjoitti:
kirjaimet = fontti.render(" a b c d e f g h i j", True, (0, 0, 0))
Eikö olisi helpompaa tulostaa kukin kirjain sopivaan kohti kuin tulostaa kirjaimia ja välilyöntejä ja toivoa että ne tuurilla osuu oikeisiin kohtiin?
Joo pitää varmaan alkaa laittamaan fonttitiedosto mukaan jos ei muu auta. Vai tuleekohan tuossa pygamen mukana joku fontti mitä se käyttää oletuksena.
Grez kirjoitti:
Eikö olisi helpompaa tulostaa kukin kirjain sopivaan kohti kuin tulostaa kirjaimia ja välilyöntejä ja toivoa että ne tuurilla osuu oikeisiin kohtiin?
Samaa mieltä tästä. Luulisi pygame:lla olevan mahdollista selvittää merkkijonon mitat halutulle fontille ja muodostaa tuosta suorakaide. Nyt, kun piirrät ruudukkoa niin olisi helppo keskittää tuo tekstin vaatima suorakaide ruudukon ruudun suorakaiteen kanssa ja piirtää teksti tuohon.
Tällöin teksti on aina oikeassa kohdassa eikä haittaa vaikka ei käyttäisi monospace fonttia.
Joo linuxissa ei oo Arial fonttia niin saattaa käyttää jotain aivan muuta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.