最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pygame學(xué)習(xí)筆記(3):運(yùn)動(dòng)速率、時(shí)間、事件、文字

 更新時(shí)間:2015年04月15日 09:21:01   投稿:junjie  
這篇文章主要介紹了pygame學(xué)習(xí)筆記(3):運(yùn)動(dòng)速率、時(shí)間、事件、文字,本文講解了運(yùn)動(dòng)速率、事件、字體及字符顯示等內(nèi)容,需要的朋友可以參考下

1、運(yùn)動(dòng)速率

上節(jié)中,實(shí)現(xiàn)了一輛汽車在馬路上由下到上行駛,并使用了pygame.time.delay(200)來(lái)進(jìn)行時(shí)間延遲。看了很多參考材料,基本每個(gè)材料都會(huì)談到不同配置機(jī)器下運(yùn)動(dòng)速率的問(wèn)題,有的是通過(guò)設(shè)定頻率解決,有的是通過(guò)設(shè)定速度解決,自己本身水平有限,看了幾篇,覺(jué)得還是《Beginning Game Development with Python and Pygame》這里面提到一個(gè)方法比較好。代碼如下,代碼里更改的地方主要是main里的代碼,其中利用clock=pygame.time.Clock()來(lái)定義時(shí)鐘,speed=250.0定義了速度,每秒250像素,time_passed=clock.tick()為上次運(yùn)行時(shí)間單位是毫秒,time_passed_seconds=time_passed/1000.0將單位改為秒,distance_moved=time_passed_seconds*speed時(shí)間乘以速度得到移動(dòng)距離,這樣就能保證更加流暢。

復(fù)制代碼 代碼如下:

import pygame,sys
def lineleft():
    plotpoints=[]
    for x in range(0,640):
        y=-5*x+1000
        plotpoints.append([x,y])
    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
    pygame.display.flip()
def lineright():
    plotpoints=[]
    for x in range(0,640):
        y=5*x-2000
        plotpoints.append([x,y])
    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
    pygame.display.flip()   
def linemiddle():
    plotpoints=[]
    x=300
    for y in range(0,480,20):
        plotpoints.append([x,y])
        if len(plotpoints)==2:
            pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
            plotpoints=[]
    pygame.display.flip()
def loadcar(yloc):
    my_car=pygame.image.load('ok1.jpg')
    locationxy=[310,yloc]
    screen.blit(my_car,locationxy)
    pygame.display.flip()

   
if __name__=='__main__':
    pygame.init()
    screen=pygame.display.set_caption('hello world!')
    screen=pygame.display.set_mode([640,480])
    screen.fill([255,255,255])
    lineleft()
    lineright()
    linemiddle()
 
    clock=pygame.time.Clock()
    looper=480
    speed=250.0
    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()

        pygame.draw.rect(screen,[255,255,255],[310,(looper+132),83,132],0)
        time_passed=clock.tick()
        time_passed_seconds=time_passed/1000.0
        distance_moved=time_passed_seconds*speed
        looper-=distance_moved
       
        if looper<-480:
            looper=480 
        loadcar(looper)

2、事件
   
我理解的就是用來(lái)解決鍵盤、鼠標(biāo)、遙控器等輸入后做出什么反映的。例如上面的例子,可以通過(guò)按上方向鍵里向上來(lái)使得小車向上移動(dòng),按下向下,使得小車向下移動(dòng)。當(dāng)小車從下面倒出時(shí),會(huì)從上面再出現(xiàn),當(dāng)小車從上面駛出時(shí),會(huì)從下面再出現(xiàn)。代碼如下。event.type == pygame.KEYDOWN用來(lái)定義事件類型,if event.key==pygame.K_UP這里是指當(dāng)按下向上箭頭時(shí),車前進(jìn)。if event.key==pygame.K_DOWN則相反,指按下向下箭頭,車后退。

復(fù)制代碼 代碼如下:

import pygame,sys
def lineleft():
    plotpoints=[]
    for x in range(0,640):
        y=-5*x+1000
        plotpoints.append([x,y])
    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
    pygame.display.flip()
def lineright():
    plotpoints=[]
    for x in range(0,640):
        y=5*x-2000
        plotpoints.append([x,y])
    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
    pygame.display.flip()   
def linemiddle():
    plotpoints=[]
    x=300
    for y in range(0,480,20):
        plotpoints.append([x,y])
        if len(plotpoints)==2:
            pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
            plotpoints=[]
    pygame.display.flip()
def loadcar(yloc):
    my_car=pygame.image.load('ok1.jpg')
    locationxy=[310,yloc]
    screen.blit(my_car,locationxy)
    pygame.display.flip()

   
if __name__=='__main__':
    pygame.init()
    screen=pygame.display.set_caption('hello world!')
    screen=pygame.display.set_mode([640,480])
    screen.fill([255,255,255])
    lineleft()
    lineright()
    linemiddle()

    looper=480

    while True:
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:

                if event.key==pygame.K_UP:
                    looper=looper-50
                    if looper<-480:
                       looper=480
                   
                    pygame.draw.rect(screen,[255,255,255],[310,(looper+132),83,132],0)
                    loadcar(looper)
                if event.key==pygame.K_DOWN:
                    looper=looper+50
                    if looper>480:
                       looper=-480
                    pygame.draw.rect(screen,[255,255,255],[310,(looper-132),83,132],0)
                    loadcar(looper)

3、字體及字符顯示

使用字體模塊用來(lái)做游戲的文字顯示,大部分游戲都會(huì)有諸如比分、時(shí)間、生命值等的文字信息。pygame主要是使用pygame.font模塊來(lái)完成,常用到的一些方法是:
pygame.font.SysFont(None, 16),第一個(gè)參數(shù)是說(shuō)明字體的,可以是"arial"等,這里None表示默認(rèn)字體。第二個(gè)參數(shù)表示字的大小。如果無(wú)法知道當(dāng)前系統(tǒng)中裝了哪些字體,可以使用pygame.font.get_fonts()來(lái)獲得所有可用字體。
pygame.font.Font("AAA.ttf", 16),用來(lái)使用TTF字體文件。
render("hello world!", True, (0,0,0), (255, 255, 255)),render方法用來(lái)創(chuàng)建文字。第一個(gè)參數(shù)是寫的文字;第二個(gè)參數(shù)是否開(kāi)啟抗鋸齒,就是說(shuō)True的話字體會(huì)比較平滑,不過(guò)相應(yīng)的速度有一點(diǎn)點(diǎn)影響;第三個(gè)參數(shù)是字體的顏色;第四個(gè)是背景色,無(wú)表示透明。
下面將上面的例子添加當(dāng)前汽車坐標(biāo):

復(fù)制代碼 代碼如下:

import pygame,sys
def lineleft():
    plotpoints=[]
    for x in range(0,640):
        y=-5*x+1000
        plotpoints.append([x,y])
    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
    pygame.display.flip()
def lineright():
    plotpoints=[]
    for x in range(0,640):
        y=5*x-2000
        plotpoints.append([x,y])
    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
    pygame.display.flip()   
def linemiddle():
    plotpoints=[]
    x=300
    for y in range(0,480,20):
        plotpoints.append([x,y])
        if len(plotpoints)==2:
            pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)
            plotpoints=[]
    pygame.display.flip()
def loadcar(yloc):
    my_car=pygame.image.load('ok1.jpg')
    locationxy=[310,yloc]
    screen.blit(my_car,locationxy)
    pygame.display.flip()
def loadtext(xloc,yloc):
    textstr='location:'+str(xloc)+','+str(yloc)
    text_screen=my_font.render(textstr, True, (255, 0, 0))
    screen.blit(text_screen, (50,50))
   
if __name__=='__main__':
    pygame.init()
    screen=pygame.display.set_caption('hello world!')
    screen=pygame.display.set_mode([640,480])
   
    my_font=pygame.font.SysFont(None,22)
    screen.fill([255,255,255])
    loadtext(310,0)   
    lineleft()
    lineright()
    linemiddle()

    looper=480

    while True:

        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:

                if event.key==pygame.K_UP:
                    looper=looper-50
                    if looper<-132:
                       looper=480
                if event.key==pygame.K_DOWN:
                    looper=looper+50
                    if looper>480:
                       looper=-132
                    loadtext(310,looper)
                screen.fill([255,255,255])                   
                loadtext(310,looper)
                lineleft()
                lineright()
                linemiddle()
                loadcar(looper)

這個(gè)例子里直接讓背景重繪一下,就不會(huì)再像1、2里面那樣用空白的rect去覆蓋前面的模塊了。

相關(guān)文章

  • 跟老齊學(xué)Python之有容乃大的list(2)

    跟老齊學(xué)Python之有容乃大的list(2)

    上一篇文章中,我們對(duì)list的操作提到了list.append(x),也就是將某個(gè)元素x 追加到已知的一個(gè)list后邊。今天我們來(lái)繼續(xù)討論list。
    2014-09-09
  • Python和RabbitMQ進(jìn)行消息傳遞和處理方式

    Python和RabbitMQ進(jìn)行消息傳遞和處理方式

    這篇文章主要介紹了Python和RabbitMQ進(jìn)行消息傳遞和處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • python如何實(shí)現(xiàn)不可變字典inmutabledict

    python如何實(shí)現(xiàn)不可變字典inmutabledict

    這篇文章主要介紹了python如何實(shí)現(xiàn)不可變字典inmutabledict,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python如何實(shí)現(xiàn)從視頻中提取每秒圖片

    python如何實(shí)現(xiàn)從視頻中提取每秒圖片

    這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)從視頻中提取每秒圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python調(diào)用scp向服務(wù)器上傳文件示例

    Python調(diào)用scp向服務(wù)器上傳文件示例

    今天小編就為大家分享一篇Python調(diào)用scp向服務(wù)器上傳文件示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • pycharm全局修改方式

    pycharm全局修改方式

    這篇文章主要介紹了pycharm全局修改方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python根據(jù)Excel表進(jìn)行文件重命名的實(shí)現(xiàn)示例

    Python根據(jù)Excel表進(jìn)行文件重命名的實(shí)現(xiàn)示例

    在日常辦公過(guò)程中,批量重命名是經(jīng)常使用的操作,本文主要介紹了Python根據(jù)Excel表進(jìn)行文件重命名,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • pycharm打開(kāi)chrome自動(dòng)退出錯(cuò)誤的解決方法

    pycharm打開(kāi)chrome自動(dòng)退出錯(cuò)誤的解決方法

    這篇文章主要給大家介紹了關(guān)于pycharm打開(kāi)chrome自動(dòng)退出錯(cuò)誤的解決方法,文中通過(guò)實(shí)例代碼以及圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 如何利用python生成MD5并去重

    如何利用python生成MD5并去重

    這篇文章主要給大家介紹了關(guān)于如何利用python生成MD5并去重的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python random模塊的使用示例

    Python random模塊的使用示例

    這篇文章主要介紹了Python random模塊的使用示例,幫助大家更好的理解和使用python生成隨機(jī)數(shù),感興趣的朋友可以了解下
    2020-10-10

最新評(píng)論

莫力| 咸丰县| 色达县| 三原县| 聂荣县| 清河县| 喀喇沁旗| 庆云县| 东阿县| 金华市| 延庆县| 西充县| 玉环县| 阿克陶县| 岳池县| 西丰县| 吴堡县| 仙居县| 嘉义县| 咸丰县| 中超| 明溪县| 丁青县| 化德县| 唐河县| 得荣县| 陇西县| 会同县| 禄丰县| 斗六市| 枣强县| 太湖县| 海丰县| 琼结县| 旬邑县| 天峻县| 兴国县| 邵武市| 民权县| 桐城市| 长兴县|