日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Godot中制作杀戮尖塔的箭头

發布時間:2024/1/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Godot中制作杀戮尖塔的箭头 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

殺戮尖塔的卡牌箭頭

殺戮尖塔里面使用卡牌時的箭頭是這樣的:
?


貝塞爾曲線

箭頭的形態非常符合貝塞爾曲線。

PS 中的鋼筆工具就是用的貝塞爾曲線:
?


如圖,一條貝塞爾曲線需要用四個點來確定,一個起點,一個終點,加上兩個控制點。

我們把四個點分別命名:起點(startPos),終點(endPos),控制點 A(ctrlAPos),控制點 B(ctrlBPos)

貝塞爾曲線的公式是:
?

  • position = startPos*(1-t)*(1-t)*(1-t)
  • ? ? + 3*ctrlAPos*t*(1-t)*(1-t)
  • ? ? + 3*ctrlBPos*t*t*(1-t)
  • ? ? + endPos*t*t*t
  • 復制代碼


    四個點都確定后,公式里的 t 就是唯一的變量,t 是指從起點到終點的百分比,取值是 0~1。

    比如 0 代表曲線起點,0.2 代表曲線從起點開始 20% 的位置,0.5 代表曲線中間位置,1 代表曲線終點。

    公式的計算結果 position 就是當前 t 值所對應的曲線上的點。

    不過在游戲中我們是使用兩個點來確定曲線的,卡牌所在位置是曲線的起點,鼠標所在位置是曲線的終點。

    那么兩個控制點就要根據起點和終點來進行計算。

    殺戮尖塔里的曲線大致是這樣:
    ?


    我們可以大致的寫出控制點的計算公式:
    ?

  • ctrlAPos.x = startPos.x + (startPos.x - endPos.x) * 0.2
  • ctrlAPos.y = endPos.y - (endPos.y - startPos.y) * 0.2
  • ctrlBPos.x = startPos.x - (startPos.x - endPos.x) * 0.2
  • ctrlBPos.y = endPos.y + (endPos.y - startPos.y) * 0.2
  • 復制代碼


    當然這個計算公式可以自己微調,使曲線更符合自己想要的形態

    Godot 中的實現

    理解了曲線的原理,現在開始在 godot 中實現。

    我畫了兩個箭頭,箭頭 1 和箭頭 2,如圖。
    ?


    在 godot 中新建一個場景,新建 Node2D,命名為貝塞爾箭頭。添加腳本。
    ?


    開始寫腳本。首先我們的箭頭有20節,我們需要在初始化的時候準備好。

    之后更新箭頭時重新排好每一節就能形成一條曲線。
    ?

  • extends Node2D
  • var list=[] #數組,用來保存20節小箭頭
  • func _ready():
  • ? ? #生成19節尾巴小箭頭,用箭頭1的圖片
  • ? ? for i in range(19):
  • ? ?? ???var sprite=Sprite.new()? ? #新建 Sprite 節點
  • ? ?? ???add_child(sprite)? ?? ?? ? #添加到場景里
  • ? ?? ???list.append(sprite)? ?? ???#添加到數組里
  • ? ?? ???sprite.texture=load("res://Sprites/箭頭1.png")??#把圖片換成箭頭1
  • ? ?? ???sprite.scale=Vector2(1,1)*(0.2+float(i)/18*0.8) #改變縮放,根據殺戮尖塔,箭頭是一節節越來越大的
  • ? ?? ???sprite.offset=Vector2(-25,0)??#由于我畫的圖片中心點在箭頭中間,
  • ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???#這里改變一下圖片偏移,把圖片中心點移動到箭頭頭部
  • ? ? #最后生成終點的箭頭,用箭頭2的圖片
  • ? ? var sprite=Sprite.new()? ?
  • ? ? add_child(sprite)
  • ? ? list.append(sprite)
  • ? ? sprite.texture=load("res://Sprites/箭頭2.png")
  • ? ? sprite.offset=Vector2(-25,0)
  • 復制代碼


    然后我們需要一個函數來設置箭頭的起點和終點
    ?

  • func reset(startPos,endPos):
  • ? ? #根據傳入的起點和終點來計算兩個控制點
  • ? ? var ctrlAPos=Vector2()
  • ? ? var ctrlBPos=Vector2()
  • ? ? ctrlAPos.x=startPos.x+(startPos.x-endPos.x)*0.1 #這里我把參數做了微調,感覺這樣更加符合殺戮尖塔的效果
  • ? ? ctrlAPos.y=endPos.y-(endPos.y-startPos.y)*0.2
  • ? ? ctrlBPos.y=endPos.y+(endPos.y-startPos.y)*0.3
  • ? ? ctrlBPos.x=startPos.x-(startPos.x-endPos.x)*0.3
  • ? ?#根據貝塞爾曲線重新設置所有小箭頭的位置
  • ? ? for i in range(20):
  • ? ?? ???var t=float(i)/19
  • ? ?? ???var pos=startPos*(1-t)*(1-t)*(1-t)+3*ctrlAPos*t*(1-t)*(1-t)+3*ctrlBPos*t*t*(1-t)+endPos*t*t*t
  • ? ?? ???list[i].position=pos
  • ? ?#雖然更改了箭頭的位置,不過還需要重新計算箭頭的方向? ?
  • ? ?updateAngle()? ?#重新計算所有箭頭的方向
  • 復制代碼


    接下來我們需要完成 updateAngle()這個函數

    思路是二手游戲拍賣每個小箭頭根據前一個箭頭和自己的位置來計算角度

  • func updateAngle():
  • ? ? for i in range(20):
  • ? ?? ???if i==0:
  • ? ?? ?? ?? ?list[0].rotation_degrees=270? ? #第一個小箭頭就讓他固定朝上好了
  • ? ?? ???else:
  • ? ?? ?? ?? ?var current=list[i]? ? #當前的小箭頭
  • ? ?? ?? ?? ?var last=list[i-1]? ???#前一個小箭頭
  • ? ?? ?? ?? ?var lenVec=current.position-last.position? ?? ?#兩個箭頭連線的向量
  • ? ?? ?? ?? ?var a=lenVec.angle()? ?? ? #計算這個向量的角度,這個 angle()返回值是弧度
  • ? ?? ?? ?? ?a=rad2deg(a)? ?? ?? ?? ?? ?#弧度轉成角度
  • ? ?? ?? ???
  • ? ?? ?? ?? ?current.rotation_degrees=a #更新小箭頭的方向
  • 復制代碼


    效果

    我們的貝塞爾箭頭就做好了,外界只要調用 reset 方法就能更新箭頭,

    不需要用的時候可以用 visible = false 把它隱藏掉

    我把它放到游戲中看看效果
    ?


    非常完美!

    總結

    以上是生活随笔為你收集整理的在Godot中制作杀戮尖塔的箭头的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 蜜桃久久久aaaa成人网一区 | 91成品人影院 | 欧美成人一区二区在线 | 偷拍一区二区三区四区 | 疯狂撞击丝袜人妻 | 亚洲一区二区免费看 | 日韩精品视频中文字幕 | 亚洲影院中文字幕 | 一道本视频在线 | 国产在线激情视频 | 欧美啪啪一区 | 成年人视频网站 | 在线a免费 | 亚洲黄色成人网 | 国产精品麻豆一区二区 | 色网站视频 | 精品自拍视频 | 欧美黑人孕妇孕交 | 人人插人人搞 | 日本不卡视频 | 蜜臀久久99精品久久久画质超高清 | 黄色网址哪里有 | 男生和女生靠逼视频 | 人妻91麻豆一区二区三区 | 美国黄色网址 | 拍摄av现场失控高潮数次 | 色爽爽爽爽爽爽爽爽 | 黄色网日本 | 国产色在线观看 | 日韩精品一区二区三区四区五区 | 在线黄av | 成人依人 | 亚洲精品一区二区潘金莲 | 色桃网 | 亚洲久久色| 欧美性猛交xx乱大交 | 国产区av | 色伊人久久 | 亚洲国产亚洲 | 熟妇人妻va精品中文字幕 | 国产男女猛烈无遮挡 | 9i精品福利一区二区三区 | 色婷婷网| 欧美午夜大片 | 久久精品偷拍视频 | 男人懂的网站 | 精品人妻无码一区二区性色 | 黑人精品无码一区二区三区AV | 青青草视频免费看 | 在线亚洲天堂 | 亚洲视频日韩 | 成人免费看aa片 | 暴操白虎 | av中文字幕一区 | 国产一区二区视频播放 | 亚洲free性xxxx护士白浆 | 国产精品扒开做爽爽爽的视频 | 一级黄色免费 | 久草资源网站 | 九色丨蝌蚪丨成人 | 香蕉视频网站在线 | 亚洲精品在线观看免费 | 欧美日韩在线免费播放 | 国产伦精品一区二区三区88av | 美国一级黄色大片 | 久久黄色一级 | 青青在线播放 | 国产麻豆一精品一av一免费 | 欧洲亚洲国产精品 | 免费毛片一区二区三区久久久 | 在线一区 | 谁有免费黄色网址 | 国产成人av一区 | 五月激情婷婷在线 | 国产精品自在线 | 国产精九九网站漫画 | 草草地址线路①屁屁影院成人 | 狂野欧美性猛交xxxxhd | 国产又粗又硬又黄的视频 | 欧美国产在线视频 | 中国一级黄色 | 免费看特级毛片 | 体内精69xxxxx| 亚洲逼院 | 日韩一二三区 | aa视频在线观看 | 91在线视频导航 | 91成人毛片| 亚洲免费福利 | 欧美裸体xxxx极品少妇 | 蜜色影院 | 成人精品亚洲 | 亚洲国产网 | 欧美丝袜一区二区三区 | 一区二区视频在线观看 | 国产大片91| 四季av一区二区三区免费观看 | 日韩在线免费 | 国产又粗又猛又爽69xx |