 Note: this physics engine is not the only possible one to create

## 示例

This example uses only one script. It requires only one costume and contains the ability for a 角色 to:

• move horizontally on tilted and flat surfaces
• jump
• collide with a specific color (which can be modified to be a sprite)

The following script would be placed into the sprite which performs the physics.

```當 @greenflag 被點擊

如果 <[向右 v] 鍵被按下？> 那麼
變數 [x velocity v] 改變 (1) // "x velocity" is the horizontal speed, and changing it by "1" makes the sprite move more right
end // when you intend for the sprite to move right
如果 <[向左 v] 鍵被按下？> 那麼
變數 [x velocity v] 改變 (-1) // makes the sprite move more left
end // when you intend for the sprite to move left
變數 [x velocity v] 設為 ((x velocity) * (0.9)) // for a gradual slowdown and to prevent the speed from reaching too high
x 改變 (x velocity) // the actual, physical movement
如果 <碰到顏色 [#1B2BE0] ?> 那麼
y 改變 (([abs v] 數值 (x velocity)) + (1)) // the faster you move, the more velocity it has to go up a slope
如果 <碰到顏色 [#1B2BE0] ?> 那麼
y 改變 ((0) - (([abs v] 數值 (x velocity)) + (1))) // go back down it
x 改變 ((0) - (x velocity)) // go to the previous x座標 at the bottom of the slope
變數 [x velocity v] 設為 ((x velocity) / (2)) // slow down after collision with wall or steep slope
end // if the slope is too steep
end // if colliding with either a ramp or wall
如果 <[向上 v] 鍵被按下？> 那麼
y 改變 (-1) // truly, the sprite is 1 pixel above the platform, meaning it has to move down 1 to check if it's "on it"
如果 <碰到顏色 [#1B2BE0] ?> 那麼
變數 [y velocity v] 設為 (10) // gives the speed needed to jump
end // if on the platform
y 改變 (1) // go back up 1 pixel since the sprite went down 1 before to check if it was on a platform
end
如果 <(y velocity) < (3)> 那麼
y 改變 (-1) // to check if on the platform
如果 <<碰到顏色 [#1B2BE0] ?> 不成立> 那麼
變數 [y velocity v] 改變 (-1) // gravity exerting a faster downward force
end // if not on the platform
y 改變 (1) // because before the sprite moved down 1 pixel, and now it must go back in place
end // when reaching the top of a jump or falling downward
變數 [y velocity v] 設為 ((y velocity) * (.9)) // for gradual movement change, as in realistic physics
y 改變 (y velocity) // the previous scripts set the speed, but now the sprite physically moves vertically
如果 <碰到顏色 [#1B2BE0] ?> 那麼
y 改變 ((0) - (y velocity)) // reverses the direction
變數 [y velocity v] 設為 ((y velocity) / (2.5)) // greatly reduces vertical speed after collision to the sprite nearly stops
end // if colliding with a floor or ceiling
end
```

There is a bug where after you jump, if there is a wall too close to the sprite, then there is some velocity "left over" and the sprite jumps up and down quickly. It can be solved by going to the edge of the platform so the sprite goes down slightly and then moving it back up on the platform.