-
Notifications
You must be signed in to change notification settings - Fork 485
Add FlxG.centerGraphic() and camera.centerGraphic() #3329
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 6.2.0
Are you sure you want to change the base?
Changes from 8 commits
ec3b8c5
c4a41ff
55ace96
5603edd
a593d5a
f720a2b
ea9c93f
5b47432
cbf91ce
e3f9d55
7628284
6caea68
e38d45b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1873,6 +1873,71 @@ class FlxCamera extends FlxBasic | |
| setScale(scaleX, scaleY); | ||
| } | ||
|
|
||
| /** | ||
| * Centers `FlxSprite` by graphic size in this camera view, either by the x axis, y axis, or both. | ||
| * | ||
| * @param sprite The sprite to center. | ||
| * @param axes On what axes to center the sprite (e.g. `X`, `Y`, `XY`) - default is both. | ||
| * @return Centered sprite for chaining. | ||
| * @since TBA | ||
| */ | ||
| public function center<T:FlxSprite>(sprite:T, axes:FlxAxes = XY):T | ||
| { | ||
| // We need to disable these flags to get accurate graphic bounds | ||
| final pixelPerfectPosition = sprite.pixelPerfectPosition; | ||
| final pixelPerfectRender = sprite.pixelPerfectRender; | ||
| sprite.pixelPerfectPosition = false; | ||
| @:bypassAccessor sprite.pixelPerfectRender = false; | ||
|
||
|
|
||
| final graphicBounds = sprite.getScreenBounds(null, this); | ||
|
|
||
| if (axes.x) | ||
| { | ||
| final offset = sprite.x - graphicBounds.x; | ||
| sprite.x = (width - graphicBounds.width) / 2 + offset; | ||
| } | ||
|
|
||
| if (axes.y) | ||
| { | ||
| final offset = sprite.y - graphicBounds.y; | ||
| sprite.y = (height - graphicBounds.height) / 2 + offset; | ||
| } | ||
|
|
||
| // Now we set flags back to their original state | ||
| sprite.pixelPerfectPosition = pixelPerfectPosition; | ||
| @:bypassAccessor sprite.pixelPerfectRender = pixelPerfectRender; | ||
| graphicBounds.put(); | ||
| return sprite; | ||
| } | ||
|
|
||
| /** | ||
| * Centers `FlxObject` by hitbox size in this camera view, either by the x axis, y axis, or both. | ||
| * | ||
| * @param object The object to center. | ||
| * @param axes On what axes to center the object (e.g. `X`, `Y`, `XY`) - default is both. | ||
| * @return Centered object for chaining. | ||
| * @since TBA | ||
| */ | ||
| public function centerHitbox<T:FlxObject>(object:T, axes:FlxAxes = XY):T | ||
| { | ||
| final hitbox = object.getHitbox(); | ||
|
|
||
| if (axes.x) | ||
| { | ||
| final offset = object.x - hitbox.x; | ||
| object.x = scroll.x + (width - hitbox.width) / 2 + offset; | ||
| } | ||
|
|
||
| if (axes.y) | ||
| { | ||
| final offset = object.y - hitbox.y; | ||
| object.y = scroll.y + (height - hitbox.height) / 2 + offset; | ||
| } | ||
|
|
||
| hitbox.put(); | ||
richTrash21 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| return object; | ||
| } | ||
|
|
||
| /** | ||
| * The size and position of this camera's margins, via `viewMarginLeft`, `viewMarginTop`, `viewWidth` | ||
| * and `viewHeight`. | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.