|
|
?/logoss
???indienova
????https://www.indienova.com/indie-game-development/making-slay-the-spire-arrow-with-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 ?????
????????????
?????
|
|