create account

Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope! by sp33dy

View this thread on: hive.blogpeakd.comecency.com
· @sp33dy · (edited)
$46.45
Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope!
# ![Godot Engine Logo v3 (Beginner).png](https://steemit-production-imageproxy-upload.s3.amazonaws.com/DQmQ2KnJBHuH1PibeKCeJfYy3WnUasothREFQUNhPnQuzT1_1680x8400)  Tutorial

![](https://steemit-production-imageproxy-thumbnail.s3.amazonaws.com/DQmeRXYK5hTURHD9TqUuGi4vPsockATFzcKFZdawUYpq24B_1680x8400) ...learn about RigidBody Rope!

# What Will I Learn?
Hi,

In my last [tutorial](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-rigidbody-chain), I demonstrated how to create a simulated Chain, using RigidBody Nodes utilising Godot Engine's physics engine.

Despite my thinking that this was going to be an easier topic, I was soon corrected!

This is what I've created:

<center>
!()[https://youtu.be/C1fpylP2YfQ]
</center>

----

### Assumptions
> * You have installed [Godot Engine v3.0](https://steemit.com/gamedev/@sp33dy/installing-godot-engine-v3-0-windows)
> * You are familiar with GDScipt

### You will

* Be given an overview
* Prototype the effect
* Create the Long Rope edition
* Create the Short Rope edition

# Requirements

You must have installed [Godot Engine v3.0](https://steemit.com/gamedev/@sp33dy/installing-godot-engine-v3-0-windows).

All the code from this tutorial is provided in a [GitHub repository](https://github.com/sp33dy/Godot-v3-Tutorials-Competent). I'll explain more about this, towards the end of the tutorial. You may want to download this

----

# Overview

Boy, this was much more difficult than I expected! The biggest problem I faced was the reality that ropes are one long continuous item, whereas, Physics nodes like to be units that are linked together. This results in tearing between Nodes and 'rough' edges!

It would be possible to use RigidBody's with Collision Areas and then overlay a Beizer Curve drawn through the points they exist at, which would improve quality and fluidity; but compromise in the graphics image and speed is relinquished.

My want was a Rope that swung and interacted, much like the Chain in the previous tutorial. 

Let's begin!

# Prototype the effect
In my head, as I started this tutorial, I knew how I perceived the Rope to work. Before coding scripts, I manually created the effect by adding Nodes to the Game Scene as I felt was needed.

Let me walk you through what I did, as I recommend it as a 'good practice' to get into.

I built this:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521812944/r58eodwnsfhtk9hdpffg.png)

Let's see it in operation:

![prototype.gif](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813125/x6bjimmchqy6e6ia58at.gif)

I added a StaticBody2D to anchor the rope structure and then added several RigidBody2D pieces as smaller and nested children. Here's the Node tree:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813298/vijrhoq7vtt1qtrx6uhy.png)

The interesting points to note are:

1. The Anchor is the StaticBody2D as mentioned above
2. The Anchor contains a Collision shape, Sprite and PinJoint
3. Each PinJoint contains a RigidBody2D as a child
4. The RigidBody2D contains the same structure as seen in item 2

With this structure, the entire rope may be easily formed. 

> I've left the prototype in the source code that can be found in the GitHub repository stated below

The Collision Shape for each RigidBody2D was added as a capsule shape:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813643/fodhwtjxhfzfugpzhk5z.png)

This allows us to create an overlapping chain of shapes:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813686/eptprdaocwgkqlr4ef0d.png)

i.e. if I move the second capsule to the right:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813723/hjfhg8luynexxk0ib6xg.png)

You will note the overlapping Shapes form a nice circle, this is what I was aiming for! This is effectively where the Sprite image needs to be positioned over; the hinge between two Rigid Body joins.

Like so:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813811/s3ludyskfi3gqqv5r24g.png)

As I add children links, we form the 'Rope' effect:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813866/ipclywfg99drhrhbfxwu.png)

.... but hang on, it doesn't look like a rope!!! It looks like the Godot Engine icon!

Yes, you are correct, what we need to do is place a piece that represents a piece of Rope, so I created this:

![ropeLink[10x16].png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813962/hrgn8wh3x2so8cuhzoqo.png)

and 

![ropeLinkLong.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813973/oqukvsnqvjdgjjzarlzx.png)

.. but that leads to more questions:

1. Why two sizes?
2. Why are the ends rounded?

The first answer is linked to my findings and struggle with this tutorial! The quality of the rope is dictated by the size of the Rope segment. The smaller it is, the smoother it becomes, BUT, the more pieces of rope you need! There is a need to balance this in your game. I can't tell you what you should do, the only state that you need to decide quality vs performance! 

> Note: I ran my code with the short piece rope to the bottom of the screen with no performance issues!

If you play with the example code, you will see that the long pieces are more noticeable at the 'joins':

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814339/cmujh8z69vu2tlr3j8pl.png)

Using this, I went and built the 'Long Rope' version

# Create the Long Rope edition
Create a new Scene, add a Node2D as the root and name it Rope and save it (I stored in /LongPieceRope/Rope.tscn)

You should create the following Node structure:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814528/wtwiikdeaxbpzs0hgtyk.png)

1. The Sprite should be the Godot Engine logo (if you don't have something to hand; you could use the original Anchor from the chain)
2. The Collision Shape should be set as a Circle with a radius of 10; this is important because if the Rope moves to vigorously, it will collide with Anchor (which is what you want), but you want to tune where it wraps
3. I left PinJoint2D settings as default, but I did rename it to 'Joint', to make the script coding simpler

We next need to create the 'Piece' instance, so please create a new Scene, add a RigidBody2D as the root and save it (I stored in /LongPieceRope/Piece.tscn).

Create the following Node structure:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814763/z3cieea0ty7kwphbk56k.png)

1. Set the RigidBody2D Transform>Position to (0, 20); if you don't, things start to go wrong! It must be placed down 20 pixels; found by experimentation.

2. Set the Collision Shape as a Capsule type with a size of 5 x 10
![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814816/pcwvfarsxja6hml5bsoa.png)

3. Rename the PinJoint2D to 'Joint'; to remain in-line with the joint in the Rope instance. Please also set the Softness to 0.1, Bias to 0.9 and ensure the Disable Collisions remains ticked (we definitely don't want collisions between Parent and Children, because our hinge is overlapping!)
![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814928/na9e3qbe19n3dn3ivjaq.png)

4. In the Sprite, set its texture to the Long piece of rope. The Shape has a size of 10 x 30, in the Transform>Position, we it to (0, -12), which is the offset that I felt was neatest.
![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815846/jjvlgilpae8bc0kpjnor.png)

We now need to complete the Rope by returning to the Rope Instance and add the following Script to the Rope Node2d:

![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815394/xo0fxd2vzoc0bserlugf.png)

Let's walk through the code:

    extends Node2D

    var PIECE = preload("res://LongPieceRope/Piece.tscn")

    export (int) var pieces = 1

> We extend the Node2D class, create a variable preloaded with the Piece instance and we expose a link count to the editor

    func _ready():
    	var parent = $Anchor
    	for i in range (pieces):
    		parent = addPiece(parent)

> When the Node is ready, loop for the number of links required and call the next function to add a new link to the parent. On its return, store the new child as a parent to the next. The parent is initialised with the Anchor before the loop

    func addPiece(parent):
    	var joint = parent.get_node("CollisionShape2D/Joint")
    	var piece= LINK.instance()
    	joint.add_child(piece)
    	joint.node_a = parent.get_path()
    	joint.node_b = piece.get_path()
    	return piece
	
> The add link function gets the parents PinJoint2D, instances a new Piece and adds it as a child to the Joint. The Joint's node A & B are set with the Parent and Child nodes before returning the piece

Easy peasy! Try running it:

<center>
![Long Piece Rope.gif](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815671/e2a9ussm7stailvumzg8.gif)
</center>

You should be able to see the 'Join' issue I mentioned above.

# Create Short Rope edition
If you would like a 'smoother' version, you need to implement the same again, but with a smaller Rope Piece image and hence, smaller Collision shapes!

Follow the same step above, but change the following:

1. Ensure the Piece RigidBody2D position is set to (0, 9)
![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816372/zffz3w28zdkduqgd8gkb.png)

2. Reduce the Piece Capsule Size in the CollisionShape2D to (5, 6)
![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816413/oggyhgkqx2mnlbpmvlxv.png)

3. Set Piece Sprite to the smaller one and set its position to (0, -7)
![image.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816457/umzcbvys3hy4dfwmxc0b.png)

That's it! Such a small change will have a BIG effect! Try rerunning again:

<center>
![Small Rope.gif](https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816698/dht9sljcwpqnfjc8yepw.gif)
</center>

Perfect! That concludes this Tutorial, but I will say, try adding different Chains and Ropes and see how the react to each other. Study the Mass properties in the RigidShapes, as you should be able to make them behave differently with each other!

# Finally

I hope this is useful to you! I've enjoyed putting it together and see several game ideas in it. Thanks for joining me.

Please do comment and ask questions! I'm more than happy to interact with you.

# Sample Project

I hope you've read through this Tutorial, as it will provide you with the hands-on skills that you simply can not learn from downloading the sample set of code. 

However, for those wanting the code, please download from [GitHub](https://github.com/sp33dy/Godot-v3-Tutorials-Competent).

You should then Import the "Rope" folder into Godot Engine.

# Other Tutorials

#### Beginners

> * [Install Godot Engine 3.0](https://steemit.com/gamedev/@sp33dy/installing-godot-engine-v3-0-windows)
> * [Installing your First Demo](https://steemit.com/gamedev/@sp33dy/first-demo-godot-engine-v3-0)
> * [Your first Sprite!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-your-first-moving-sprite)
> * [Move your first Sprite!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-move-your-sprite)
> * [Create lots of Sprites!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-create-lots-of-sprites)
> * [Sprite formations!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-sprite-formations)
> * [Smooth Movement!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-smooth-movement#comments)
> * [Invader Graphics!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-invader-graphics)
> * [Player Ship!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-player-ship)
> * [Bullets](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-bullets)
> * [Collision Detection!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-collision-dectection)
> * [Colour use!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-colour-use)

#### Competent

> * [Custom TileMaps](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-custom-tilemap)
> * [Custom TileMap Scrolling](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-custom-tilemap-scrolling)
> * [Screen Wrapping Sprite](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-generic-screen-wrapping-sprite)
> * [Screen Wrap Node](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-generic-screen-wrapping-node)
> * [Verlet vs RigidBody Physics](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-physics-verlet-vs-rigidbody)
> * [Verlet Chain!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-verlet-chain-v0-01)
> * [RigidBody Chain!](https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-rigidbody-chain)


<br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-rigidbody-rope">Utopian.io -  Rewarding Open Source Contributors</a></em><hr/>
๐Ÿ‘  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
authorsp33dy
permlinktutorial-godot-engine-v3-gdscript-rigidbody-rope
categoryutopian-io
json_metadata"{"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":15634981,"name":"godot","full_name":"godotengine/godot","html_url":"https://github.com/godotengine/godot","fork":false,"owner":{"login":"godotengine"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","gamedev","gaming","godot-engine","tutorial"],"users":["sp33dy"],"links":["https://steemit-production-imageproxy-upload.s3.amazonaws.com/DQmQ2KnJBHuH1PibeKCeJfYy3WnUasothREFQUNhPnQuzT1_1680x8400","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-rigidbody-chain","https://steemit.com/gamedev/@sp33dy/installing-godot-engine-v3-0-windows","https://github.com/sp33dy/Godot-v3-Tutorials-Competent","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521812944/r58eodwnsfhtk9hdpffg.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813125/x6bjimmchqy6e6ia58at.gif","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813298/vijrhoq7vtt1qtrx6uhy.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813643/fodhwtjxhfzfugpzhk5z.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813686/eptprdaocwgkqlr4ef0d.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813723/hjfhg8luynexxk0ib6xg.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813811/s3ludyskfi3gqqv5r24g.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813866/ipclywfg99drhrhbfxwu.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813962/hrgn8wh3x2so8cuhzoqo.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813973/oqukvsnqvjdgjjzarlzx.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814339/cmujh8z69vu2tlr3j8pl.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814528/wtwiikdeaxbpzs0hgtyk.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814763/z3cieea0ty7kwphbk56k.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814816/pcwvfarsxja6hml5bsoa.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814928/na9e3qbe19n3dn3ivjaq.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815846/jjvlgilpae8bc0kpjnor.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815394/xo0fxd2vzoc0bserlugf.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815671/e2a9ussm7stailvumzg8.gif","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816372/zffz3w28zdkduqgd8gkb.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816413/oggyhgkqx2mnlbpmvlxv.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816457/umzcbvys3hy4dfwmxc0b.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816698/dht9sljcwpqnfjc8yepw.gif","https://steemit.com/gamedev/@sp33dy/first-demo-godot-engine-v3-0","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-your-first-moving-sprite","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-move-your-sprite","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-create-lots-of-sprites","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-sprite-formations","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-smooth-movement#comments","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-invader-graphics","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-player-ship","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-bullets","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-collision-dectection","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-colour-use","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-custom-tilemap","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-custom-tilemap-scrolling","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-generic-screen-wrapping-sprite","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-generic-screen-wrapping-node","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-physics-verlet-vs-rigidbody","https://steemit.com/utopian-io/@sp33dy/tutorial-godot-engine-v3-gdscript-verlet-chain-v0-01"],"image":["https://steemit-production-imageproxy-upload.s3.amazonaws.com/DQmQ2KnJBHuH1PibeKCeJfYy3WnUasothREFQUNhPnQuzT1_1680x8400","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521812944/r58eodwnsfhtk9hdpffg.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813125/x6bjimmchqy6e6ia58at.gif","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813298/vijrhoq7vtt1qtrx6uhy.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813643/fodhwtjxhfzfugpzhk5z.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813686/eptprdaocwgkqlr4ef0d.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813723/hjfhg8luynexxk0ib6xg.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813811/s3ludyskfi3gqqv5r24g.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813866/ipclywfg99drhrhbfxwu.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813962/hrgn8wh3x2so8cuhzoqo.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521813973/oqukvsnqvjdgjjzarlzx.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814339/cmujh8z69vu2tlr3j8pl.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814528/wtwiikdeaxbpzs0hgtyk.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814763/z3cieea0ty7kwphbk56k.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814816/pcwvfarsxja6hml5bsoa.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521814928/na9e3qbe19n3dn3ivjaq.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815846/jjvlgilpae8bc0kpjnor.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815394/xo0fxd2vzoc0bserlugf.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521815671/e2a9ussm7stailvumzg8.gif","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816372/zffz3w28zdkduqgd8gkb.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816413/oggyhgkqx2mnlbpmvlxv.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816457/umzcbvys3hy4dfwmxc0b.png","https://res.cloudinary.com/hpiynhbhq/image/upload/v1521816698/dht9sljcwpqnfjc8yepw.gif"],"moderator":{"account":"amosbastian","time":"2018-03-23T16:45:20.450Z","reviewed":true,"pending":false,"flagged":false},"questions":[{"question":"Is the project description formal?","answers":[{"value":"Yes itโ€™s straight to the point","selected":true,"score":10},{"value":"Need more description ","selected":false,"score":5},{"value":"Not too descriptive","selected":false,"score":0}],"selected":0},{"question":"Is the language / grammar correct?","answers":[{"value":"Yes","selected":true,"score":20},{"value":"A few mistakes","selected":false,"score":10},{"value":"It's pretty bad","selected":false,"score":0}],"selected":0},{"question":"Was the template followed?","answers":[{"value":"Yes","selected":true,"score":10},{"value":"Partially","selected":false,"score":5},{"value":"No","selected":false,"score":0}],"selected":0},{"question":"Is there information about the additional frameworks?","answers":[{"value":"Yes, everything is explained","selected":true,"score":5},{"value":"Yes, but not enough","selected":false,"score":3},{"value":"No details at all","selected":false,"score":0}],"selected":0},{"question":"Is there code in the tutorial?","answers":[{"value":"Yes, and itโ€™s well explained","selected":true,"score":5},{"value":"Yes, but no explanation","selected":false,"score":3},{"value":"No","selected":false,"score":0}],"selected":0},{"question":"Is the tutorial explains technical aspects well enough?","answers":[{"value":"Yes, it teaches how and why about technical aspects","selected":true,"score":5},{"value":"Yes, but itโ€™s not good/enough","selected":false,"score":3},{"value":"No, it explains poorly","selected":false,"score":0}],"selected":0},{"question":"Is the tutorial general and dense enough?","answers":[{"value":"Yes, itโ€™s general and dense","selected":true,"score":5},{"value":"Kinda, it might be more generalized","selected":false,"score":3},{"value":"No, itโ€™s sliced unnecessarily to keep part number high","selected":false,"score":0}],"selected":0},{"question":"Is there an outline for the tutorial content at the beginning of the post","answers":[{"value":"Yes, there is a well prepared outline in โ€œWhat will I learn?โ€ or another outline section","selected":true,"score":5},{"value":"Yes, but there is no proper listing for every step of the tutorial or itโ€™s not detailed enough","selected":false,"score":3},{"value":"No, there is no outline for the steps.","selected":false,"score":0}],"selected":0},{"question":"Is the visual content of good quality?","answers":[{"value":"Yes","selected":true,"score":5},{"value":"Yes, but bad quality","selected":false,"score":3},{"value":"No","selected":false,"score":0}],"selected":0},{"question":"Is this a tutorial series?","answers":[{"value":"Yes","selected":true,"score":5},{"value":"Yes, but first part","selected":false,"score":3},{"value":"No","selected":false,"score":0}],"selected":0},{"question":"Is the tutorial post structured?","answers":[{"value":"Yes","selected":true,"score":5},{"value":"Not so good","selected":false,"score":3},{"value":"No","selected":false,"score":0}],"selected":0}],"score":75}"
created2018-03-23 14:55:06
last_update2018-03-23 16:45:48
depth0
children4
last_payout2018-03-30 14:55:06
cashout_time1969-12-31 23:59:59
total_payout_value32.407 HBD
curator_payout_value14.041 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length13,263
author_reputation3,475,579,509,208
root_title"Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope!"
beneficiaries
0.
accountutopian.pay
weight2,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id46,164,490
net_rshares20,100,936,861,369
author_curate_reward""
vote details (40)
@amosbastian ·
$1.06
Thank you for the contribution. It has been approved.

I haven't been keeping up with your tutorials lately (busy with university stuff), so I was wondering what happened to the game you were creating? Also, great tutorial as always!

You can contact us on [Discord](https://discord.gg/uTyJkNm).
**[[utopian-moderator]](https://utopian.io/moderators)**
๐Ÿ‘  ,
properties (23)
authoramosbastian
permlinkre-sp33dy-tutorial-godot-engine-v3-gdscript-rigidbody-rope-20180323t164804243z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-03-23 16:48:27
last_update2018-03-23 16:48:27
depth1
children2
last_payout2018-03-30 16:48:27
cashout_time1969-12-31 23:59:59
total_payout_value0.815 HBD
curator_payout_value0.243 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length352
author_reputation174,473,586,900,705
root_title"Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id46,184,293
net_rshares374,700,550,115
author_curate_reward""
vote details (2)
@sp33dy ·
$0.05
Hi Amos,

I'm just about to return to it. I got a little sidetracked with the physics. I wanted to make sure I got my head around them, as I was trying to figure out whether I should use physics in the 'Invaders' game or not. The concrete answer is NO, 'but', hehe. I think there might be a case to do something with it.

So, expect the next article over the weekend! My last post was on the 'colour changing' of the players ship and alien.

I now want to introduce the GUI and then the Waves of ships; to make it playable!
๐Ÿ‘  
properties (23)
authorsp33dy
permlinkre-amosbastian-re-sp33dy-tutorial-godot-engine-v3-gdscript-rigidbody-rope-20180323t165052384z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-03-23 16:50:54
last_update2018-03-23 16:50:54
depth2
children0
last_payout2018-03-30 16:50:54
cashout_time1969-12-31 23:59:59
total_payout_value0.040 HBD
curator_payout_value0.013 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length523
author_reputation3,475,579,509,208
root_title"Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id46,184,678
net_rshares19,298,693,835
author_curate_reward""
vote details (1)
@utopian.tip ·
$0.05
Hey @amosbastian, I just gave you a tip for your hard work on moderation. Upvote this comment to support the utopian moderators and increase your future rewards!
๐Ÿ‘  
properties (23)
authorutopian.tip
permlinkre-re-sp33dy-tutorial-godot-engine-v3-gdscript-rigidbody-rope-20180323t164804243z-20180323t191552
categoryutopian-io
json_metadata""
created2018-03-23 19:15:54
last_update2018-03-23 19:15:54
depth2
children0
last_payout2018-03-30 19:15:54
cashout_time1969-12-31 23:59:59
total_payout_value0.040 HBD
curator_payout_value0.013 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length161
author_reputation238,310,597,885
root_title"Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id46,206,255
net_rshares19,742,341,970
author_curate_reward""
vote details (1)
@utopian-io ·
### Hey @sp33dy I am @utopian-io. I have just upvoted you!
#### Achievements
- You have less than 500 followers. Just gave you a gift to help you succeed!
- Seems like you contribute quite often. AMAZING!
#### Community-Driven Witness!
I am the first and only Steem Community-Driven Witness. <a href="https://discord.gg/zTrEMqB">Participate on Discord</a>. Lets GROW TOGETHER!
- <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for my Witness With SteemConnect</a>
- <a href="https://v2.steemconnect.com/sign/account-witness-proxy?proxy=utopian-io&approve=1">Proxy vote to Utopian Witness with SteemConnect</a>
- Or vote/proxy on <a href="https://steemit.com/~witnesses">Steemit Witnesses</a>

[![mooncryption-utopian-witness-gif](https://steemitimages.com/DQmYPUuQRptAqNBCQRwQjKWAqWU3zJkL3RXVUtEKVury8up/mooncryption-s-utopian-io-witness-gif.gif)](https://steemit.com/~witnesses)

**Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x**
๐Ÿ‘  
properties (23)
authorutopian-io
permlinkre-sp33dy-tutorial-godot-engine-v3-gdscript-rigidbody-rope-20180324t170151433z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-03-24 17:01:51
last_update2018-03-24 17:01:51
depth1
children0
last_payout2018-03-31 17:01:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,082
author_reputation152,955,367,999,756
root_title"Tutorial (Godot Engine v3 - GDScript) - RigidBody Rope!"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id46,362,401
net_rshares2,493,515,459
author_curate_reward""
vote details (1)