主頁 > 後端開發 > 用Python畫圣誕樹 ‘‘遇見’’ 圣誕老人

用Python畫圣誕樹 ‘‘遇見’’ 圣誕老人

2021-12-31 09:26:22 後端開發

這是雪程式的1.1版本,

上個版本的文章---看這里:

忙活半天只為了看雪--送給大家的冬至禮物icon-default.png?t=LBL2https://blog.csdn.net/qq_54554848/article/details/121873955?spm=1001.2014.3001.5501(下述代碼基于上個版本)

上次我發布了--冬至禮物的博客,獲得了很多的瀏覽量,讓我甚是欣慰,首先在這里要感謝大家的支持,也感謝部分私信我的提出的疑問和反饋,尤其是對-----為什么我的冬至下雪程式安裝包這么大的問題的提出(打包后大于500M),讓我很是堪憂,恰巧,最近瀏覽了一篇大佬文章,讓我茅塞頓開,下面附上大佬文章鏈接:

解決 Python打包成exe 檔案過大問題的一些方法_老鷹的博客-CSDN博客_python打包exe太大icon-default.png?t=LBL2https://blog.csdn.net/weixin_42277380/article/details/112648319

還是要感謝大佬的文章,讓我快要爆滿的磁盤騰出了大部分空間,保住了寫過代碼的小命,現在介紹的1.1版本打包后僅僅七十多兆,不扯了,下面開始介紹原理:

先看一下本次程式效果:

上代碼:

這次代碼較上個版本有略微的修改:

體現在main.py檔案上,添加了啟動圣誕樹的按鈕

# 用戶視窗
import os
import tkinter
from PIL import ImageTk,Image
import snow_draw
import commands
import drawtree

root = tkinter.Tk()
size = 500, 400
root.geometry(f'{size[0]}x{size[1]}')
root.resizable(False, False)
# root.config(bg='silver')

# 我們將定義如下功能:開始、調整雪花個數、視窗自適應圖片大小比例、匯入別的圖片、修改圖片透明度、修改背景音樂、修復注冊機
# 如上功能由按鈕事件觸發的,將會隨著視窗變化而改變按鈕自適應(由于源代碼開源,使用者可能考慮修改用戶界面的大小,這里我因此靈活點)

# 先匯入界面背景圖片
image = Image.open('snow.jpg')
bg_image = ImageTk.PhotoImage(image)
width = bg_image.width()
height = bg_image.height()
root.geometry('%dx%d+0+0' % (width, height))
background_label = tkinter.Label(root, image=bg_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# 開始按鈕
button10 = tkinter.Button(root, text='看雪', font=('華文行楷', 14),
                         bg='silver', fg='red', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=snow_draw.main)

button100 = tkinter.Button(root, text='Christmas', font=('華文行楷', 14),
                         bg='silver', fg='yellow', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=drawtree.main)

button10.place(x=int(float(size[0] * 0.8)), y=int(float(0.05 * size[1])))
button100.place(x=int(float(size[0] * 0.55)), y=int(float(0.05 * size[1])))

# 調整雪花個數按鈕
button11 = tkinter.Button(root, text='雪花個數', font=('華文行楷', 14),
                         bg='silver', fg='blue', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=commands.snow_num)

button11.place(x=int(float(size[0] * 0.8)), y=int(float(0.20 * size[1])))

# 雪花視窗圖片自適應圖片按鈕
button12 = tkinter.Button(root, text='自適應', font=('華文行楷', 14),
                         bg='silver', fg='black', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=commands.fit)
button12.place(x=int(float(size[0] * 0.8)), y=int(float(0.35 * size[1])))

# 匯入別的圖片
button13 = tkinter.Button(root, text='匯入圖片', font=('華文行楷', 14),
                         bg='silver', fg='yellow', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=commands.import_image)
button13.place(x=int(float(size[0] * 0.8)), y=int(float(0.5 * size[1])))

# 匯入別的背景音樂
button14 = tkinter.Button(root, text='匯入音樂', font=('華文行楷', 14),
                         bg='silver', fg='indigo', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=commands.music)
button14.place(x=int(float(size[0] * 0.8)), y=int(float(0.65 * size[1])))

# 修改圖片透明度
button15 = tkinter.Button(root, text='透明度', font=('華文行楷', 14),
                         bg='silver', fg='green', width=int(float(size[0] * 0.02)), height=int(float(0.0025 * size[1])),
                          command=commands.alpha)
button15.place(x=int(float(size[0] * 0.8)), y=int(float(0.8 * size[1])))

# 選單
menu = tkinter.Menu(root)
root['menu'] = menu
f1 = tkinter.Menu(menu, tearoff=False)
f1.add_command(label='重置注冊機', command=commands.reg)
f1.add_command(label='關于')
menu.add_cascade(label='選單', menu=f1)
root.mainloop()

效果如圖:

(右圖為圣誕樹界面效果)

另外,之前提供的重新注冊機沒有變動,

新添功能代碼:

處理圖片,生成鏡像的程式 ---image_cope.py

# 實作圖片鏡像對稱
from PIL import Image
i1_another = Image.open('tree/1.png')
i1_another.transpose(Image.FLIP_LEFT_RIGHT).save('tree/11.png')
i2_another = Image.open('tree/2.png')
i2_another.transpose(Image.FLIP_LEFT_RIGHT).save('tree/22.png')
i3_another = Image.open('tree/3.png')
i3_another.transpose(Image.FLIP_LEFT_RIGHT).save('tree/33.png')

實作人物移動的程式

(這兩個檔案的靈感源于此站的某位大佬,但是這是很久之前學習的,現在找不到了,文章很好,找到我會分享給大家)

---core.py

這個是控制人物移動

step = 2  # 每幀移動的像素
class Sprite:
    """
    用于繪制精靈圖的工具類
    """
    @staticmethod
    def draw(dest, source, x, y, cell_x, cell_y, cell_w=128, cell_h=128):
        """
        繪制精靈圖中,指定x,y的影像
        :param dest: surface型別,要繪制到的目標surface
        :param source: surface型別,來源surface
        :param x: 繪制影像在dest中的坐標
        :param y: 繪制影像在dest中的坐標
        :param cell_x: 在精靈圖中的格子坐標
        :param cell_y: 在精靈圖中的格子坐標
        :param cell_w: 單個精靈的寬度
        :param cell_h: 單個精靈的高度
        :return:
        """
        dest.blit(source, (x, y), (cell_x * cell_w, cell_y * cell_h, cell_w, cell_h))


class CharWalk:
    """
    人物行走類 char是character的縮寫
    """
    DIR_DOWN = 0
    DIR_RIGHT = 1
    DIR_UP = 2
    DIR_LEFT = 3
    DIR_DANCE = 4
    DIR_FAINT = 5  # 暈倒

    def __init__(self, hero_surf, dir, mx, my,step=2):
        """
        :param hero_surf: 精靈圖的surface
        :param dir: 角色方向
        :param mx: 角色所在的小格子坐標
        :param my: 角色所在的小格子坐標
        """
        self.hero_surf = hero_surf
        self.dir = dir
        self.mx = mx
        self.my = my
        # 相對
        self.is_walking = False  # 角色是否正在移動
        self.frame = 0  # 角色當前幀
        # 角色下一步需要去的格子
        self.next_mx = 0
        self.next_my = 0
        # 步長
        self.step = step  # 每幀移動的像素

    def draw(self, screen_surf):
        cell_x = int(self.frame)
        cell_y = self.dir
        Sprite.draw(screen_surf, self.hero_surf, self.mx, self.my, cell_x, cell_y)


    def goto(self, x, y):
        """
        :param x: 目標點
        :param y: 目標點
        """
        self.next_mx = x
        self.next_my = y

        # 設定人物面向
        if self.next_mx > self.mx:
            self.dir = CharWalk.DIR_RIGHT
        elif self.next_mx < self.mx:
            self.dir = CharWalk.DIR_LEFT

        elif self.next_my > self.my:
            self.dir = CharWalk.DIR_DOWN
        elif self.next_my < self.my:
            self.dir = CharWalk.DIR_UP

        self.is_walking = True

    def move(self):
        if not self.is_walking:
            return
        dest_x = self.next_mx
        dest_y = self.next_my

        # 向目標位置靠近
        if self.mx < dest_x:
            self.mx += self.step
            if self.mx >= dest_x:
                self.mx = dest_x
                self.goto(self.next_mx, self.next_my)
        elif self.mx > dest_x:
            self.mx -= self.step
            if self.mx <= dest_x:
                self.mx = dest_x
                self.goto(self.next_mx, self.next_my)

        elif self.my < dest_y:
            self.my += self.step
            if self.my >= dest_y:
                self.my = dest_y
        elif self.my > dest_y:
            self.my -= self.step
            if self.my <= dest_y:
                self.my = dest_y

        # 改變當前幀
        self.frame = (self.frame + 0.1) % 4
        """此種方法控制幀數更新速度"""

        # 到達了目標點
        if self.mx == dest_x and self.my == dest_y:
            self.frame = 0
            self.is_walking = False

---move_ren.py

這個是生成人物實列

from core import CharWalk
import pygame

class Game:
    def __init__(self, screen, start_x, start_y, end_x, end_y, heroes, fps=60):
        self.screen = screen
        self.fps = fps
        self.heroes = pygame.image.load(heroes).convert_alpha()
        self.start_x = start_x
        self.start_y = start_y
        self.end_x = end_x
        self.end_y = end_y
        self.__init_game()

    def __init_game(self):
        self.heroes = pygame.transform.scale(self.heroes, (128 * 4, 128 * 4))
        # self.heroes = pygame.transform.scale(self.heroes, (16 * 4, 48*4))
        self.role = CharWalk(self.heroes, CharWalk.DIR_DOWN, self.start_x, self.start_y)  # 讀取出發坐標
        self.role.goto(self.end_x, self.end_y)  # 讀取到達坐標

再來看圣誕樹與圣誕老人---drawtree.py

代碼很像最原始的下雪程式,沒錯,原理就是把會動的人添加在原來效果上,背景重新渲 染,功能保留了原來的風格,

import sys
import pygame
import random
import os.path as path
from move_ren import Game


def main():
    # 初始化pygame
    pygame.init()
    width = 400
    height = 365
    SIZE = width * 2, height * 2
    screen = pygame.display.set_mode(SIZE, pygame.NOFRAME)

    # 根據背景圖片的大小,設定螢屏長寬
    image = pygame.image.load('tree/sds.jpg')
    image.set_alpha(150)

    i1 = pygame.image.load('tree/1.png')
    i1.set_alpha(200)

    # i1的鏡像翻轉
    i11 = pygame.image.load('tree/11.png')
    i11.set_alpha(180)
    
    i2 = pygame.image.load('tree/2.png')
    i2.set_alpha(200)

    # i1的鏡像翻轉
    i22 = pygame.image.load('tree/22.png')
    i22.set_alpha(180)
    
    i3 = pygame.image.load('tree/3.png')
    i3.set_alpha(200)

    # i1的鏡像翻轉
    i33 = pygame.image.load('tree/33.png')
    i33.set_alpha(180)
    
    
    # 雪花串列
    snow_list = []


    # 初始化雪花:(x坐標, y坐標), x軸速度, y軸速度
    for i in range(200):
        x = random.randrange(0, SIZE[0])
        y = random.randrange(0, SIZE[1])
        # 讓雪有兩種下落趨勢--左下或者右下
        speed_x = random.randint(-1, 1)
        speed_y = random.randint(1, 4)
        snow_list.append([x, y, speed_x, speed_y])
    # 重繪幀率,控制速度
    clock = pygame.time.Clock()

    # 背景音樂
    pygame.mixer.init()
    music = pygame.mixer.Sound('tree/ddd.mp3')
    music.play(-1)

    # 動態人物
    ren = Game(screen, start_x=750, start_y=90, end_x=80, end_y=320, heroes='tree/6.png')
    ren1 = pygame.image.load('tree/7.png')
    # 引線--準時跳出圖片
    x1 = -50
    y1 = 300

    # 游戲主回圈
    while True:

        screen.fill((0, 0, 0))

        # 重影效果
        # screen.blit(pygame.transform.scale(image2, SIZE), (-width/2, 0))
        screen.blit(pygame.transform.scale(image, SIZE), (0, 0))
        screen.blit(image, (0, 0))
        screen.blit(i1, (430, 190))
        screen.blit(i11, (220, 350))
        screen.blit(i1, (500, 455))
        screen.blit(i2, (500, 650))
        screen.blit(i33, (610, 640))
        screen.blit(i22, [100, 650])
        screen.blit(i33, (350, 655))
        screen.blit(i3, (180, 620))
        
        # screen.blit()
        # 事件檢測
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYDOWN:
                # 按q鍵退出
                if event.key == event.key == pygame.K_q:
                    sys.exit()
                # 按s鍵截圖
                if event.key == pygame.K_s:
                    list_file = []
                    list_ooo = list(range(1000))
                    for num_in in list_ooo:
                        if path.isfile('picture/picture' + str(num_in) + '.jpg'):
                            continue
                        else:
                            list_file.append(num_in)
                    pygame.image.save(screen, 'picture/picture' + str(list_file[0]) + '.jpg')

        # 圣誕老人奔跑
        ren.role.move()
        ren.role.draw(screen)
        pygame.display.update()
        # 發放禮物
        if x1 < 60:
            x1 += 0.23
        else:
            screen.blit(ren1, (x1, y1))


        # 隨機下雪
        for i in range(len(snow_list)):
            # a = (192, 192, 192)
            a = (255, 255, 255)
            pygame.draw.circle(
                # 顯示
                screen,
                # 顏色
                [int(f) for f in a],
                # 降落點
                snow_list[i][:2],
                # 雪花半徑
                snow_list[i][3],
                # 充實雪花顆粒
                0
            )
            # 移動雪花位置(下一次回圈起效)
            snow_list[i][0] += snow_list[i][2]
            snow_list[i][1] += snow_list[i][3]

            # 如果雪花落出螢屏,可以讓雪不停的下
            if snow_list[i][1] > SIZE[1]:
                snow_list[i][1] = random.randrange(-50, -10)
                snow_list[i][0] = random.randrange(0, SIZE[0])

        # 重繪螢屏
        pygame.display.flip()
        clock.tick(20)

if __name__ == '__main__':
    main()

其他的,如操作說明,bug表現等等等我就不多說了,全部放在了目錄下的author.txt檔案里了,都附在下面的下載鏈接里了,

歐克,到這里詳解就差不多了(當然了,這里我沒有提供相關的素材),如果你在你的環境中運行不成功,你可以通過我在下方提供的鏈接進行下載,如需轉載,請備上轉載地址哦,如果你還有什么疑問,請在下方留言哦,請多多指教,

最后, 在這里跟大家分享一下我個人的交流群,歡迎各位各階段友友們進群,一起討論交流,群里還會不定時進行資源分享和抽獎哦,以下為QQ群號:71956064

Github鏈接:icon-default.png?t=LBL2https://github.com/PythonnotJava/Snow-1.1

完整安裝包阿里云盤下載(約70M):icon-default.png?t=LBL2https://www.aliyundrive.com/s/ZvvJGewJHKJ

若鏈接失效請留言或者私信, 我們下期再會,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398694.html

標籤:python

上一篇:程式員面試簡歷都是靠包裝?我們如何來破局?

下一篇:C :如何覆寫具有相同介面的特定類的方法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more