Multiplayer Camera Issues

I’m building demo programs for my students to introduce them to multiplayer. In this first draft of a game, there are two race cars that navigate a course and attempt the get to finish line in the shortest time. LINK HERE.
Problem: With a single player, the camera follows the car. When a second player enters, camera follow freezes after a few moves.

I would ideally like each player to be able to see where they are in the race and suspect that the second player creates a second instance of the camera leading to conflict in the view and a camera freeze. Any idea for a solution?

1 Like

Hey @stemcrafters, here’s an example solution for a camera with multiple subjects.

The basic idea is to have the camera as a seperate object, and average the coordinates of your subjects to find the location of your camera. (You’ll probably want to adjust the zoom too.)

Here’s the code you’ll need:

{"data":{"behavior":{"v":"2","nodes":[{"inputCount":5,"outputCount":5,"name":"Camera","behaviorType":"logic.components.View","x":450,"y":-256,"group":"","id":"7b91ad6bf58d0840","parallax":100,"scrollX":true,"scrollY":true,"minLeft":-100,"maxRight":100,"top":-100,"bottom":100},{"gateVal":1,"mode":"greater than","inputCount":2,"outputCount":2,"name":"Filter","behaviorType":"logic.logic.Filter2","x":90,"y":-224,"group":"","id":"7bd232db3e5f2948","notes":"Minimum zoom","n_o":1},{"gateVal":150,"mode":"less than","inputCount":2,"outputCount":2,"name":"Filter","behaviorType":"logic.logic.Filter2","x":270,"y":-224,"group":"","id":"7bd2552f9af32845","notes":"Maximum zoom","n_o":1},{"inputCount":3,"outputCount":1,"name":"Camera (2p)","behaviorType":"logic.NodeGroup","x":-90,"y":-208,"group":"","id":"bee5c375fd30114e","isMenuItem":false},{"inputCount":0,"outputCount":1,"name":"Mailbox","behaviorType":"logic.components.Mailbox","x":180,"y":-208,"group":"bee5c375fd30114e","id":"bee5c376e28dab41","msg":"X1"},{"inputCount":0,"outputCount":1,"name":"Mailbox","behaviorType":"logic.components.Mailbox","x":180,"y":-80,"group":"bee5c375fd30114e","id":"bee5c376e32f554e","msg":"X2"},{"inputCount":0,"outputCount":1,"name":"Mailbox","behaviorType":"logic.components.Mailbox","x":180,"y":304,"group":"bee5c375fd30114e","id":"bee5c3769c44874b","msg":"Y1"},{"inputCount":0,"outputCount":1,"name":"Mailbox","behaviorType":"logic.components.Mailbox","x":180,"y":400,"group":"bee5c375fd30114e","id":"bee5c376f546c44c","msg":"Y2"},{"expression":"(A+B)/2","default0":0,"default1":0,"default2":0,"default3":0,"default4":0,"default5":0,"params":2,"version":2,"tag":"","inputCount":3,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":360,"y":-224,"group":"bee5c375fd30114e","id":"bee5c379a2756540"},{"inputCount":1,"outputCount":1,"name":"Extractor","behaviorType":"logic.properties.Extractor","x":540,"y":-160,"group":"bee5c375fd30114e","id":"bee5c379ebecf543","targetId":0,"prop":"x","version":2},{"expression":"B+((A-B)*0.1)","default0":0,"default1":0,"default2":0,"default3":0,"default4":0,"default5":0,"params":2,"version":2,"tag":"","inputCount":3,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":720,"y":-224,"group":"bee5c375fd30114e","id":"bee5c379a2f1d34a"},{"inputCount":4,"outputCount":2,"name":"Position","behaviorType":"logic.properties.Position","x":1170,"y":112,"group":"bee5c375fd30114e","id":"bee5c37952bb964a","pixelUnits":true,"resetVelocity":false},{"expression":"(A+B)/2","default0":0,"default1":0,"default2":0,"default3":0,"default4":0,"default5":0,"params":2,"version":2,"tag":"","inputCount":3,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":360,"y":448,"group":"bee5c375fd30114e","id":"bee5c37a77016f41"},{"inputCount":1,"outputCount":1,"name":"Extractor","behaviorType":"logic.properties.Extractor","x":540,"y":512,"group":"bee5c375fd30114e","id":"bee5c37ae1f0074f","targetId":0,"prop":"y","version":2},{"expression":"B+((A-B)*0.1)","default0":0,"default1":0,"default2":0,"default3":0,"default4":0,"default5":0,"params":2,"version":2,"tag":"","inputCount":3,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":720,"y":448,"group":"bee5c375fd30114e","id":"bee5c37af828e242"},{"inputCount":1,"outputCount":0,"name":"Bundle Output","behaviorType":"logic.NodeGroupOutput","x":900,"y":112,"group":"bee5c375fd30114e","id":"bee5c37a609e1541","portId":"bee5c375fd30114eo0","tag":"Zoom","dataType":2},{"expression":"(C*32)/(Math.abs(A-B)+D)*100+1","default0":0,"default1":0,"default2":15,"default3":200,"default4":0,"default5":0,"params":4,"version":2,"tag":"","inputCount":5,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":540,"y":0,"group":"bee5c375fd30114e","id":"bee5c37a4c8b6d47","notes":"C is the width of screen\nD is the padding","n_o":1},{"expression":"(C*32)/(Math.abs(A-B)+D)*100+1","default0":0,"default1":0,"default2":12,"default3":200,"default4":0,"default5":0,"params":4,"version":2,"tag":"","inputCount":5,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":540,"y":240,"group":"bee5c375fd30114e","id":"bee5c37ae9e7cf44","notes":"C is height of screen\nD is the padding","n_o":1},{"expression":"Math.min(A,B)","default0":0,"default1":0,"default2":0,"default3":0,"default4":0,"default5":0,"params":2,"version":2,"tag":"","inputCount":3,"outputCount":1,"name":"Expression","behaviorType":"logic.logic.Expression","x":720,"y":112,"group":"bee5c375fd30114e","id":"bee5c37bf35f1847"},{"inputCount":0,"outputCount":1,"name":"Bundle Input","behaviorType":"logic.NodeGroupInput","x":180,"y":32,"group":"bee5c375fd30114e","id":"bee5c37bc5e6304c","portId":"bee5c375fd30114ei0","tag":"ScrenX","dataType":2},{"inputCount":0,"outputCount":1,"name":"Bundle Input","behaviorType":"logic.NodeGroupInput","x":180,"y":112,"group":"bee5c375fd30114e","id":"bee5c37b5b773344","portId":"bee5c375fd30114ei1","tag":"Padding","dataType":2},{"inputCount":0,"outputCount":1,"name":"Bundle Input","behaviorType":"logic.NodeGroupInput","x":180,"y":192,"group":"bee5c375fd30114e","id":"bee5c37bd9a8f840","portId":"bee5c375fd30114ei2","tag":"ScrenY","dataType":2},{"inputCount":0,"outputCount":1,"name":"Always","behaviorType":"logic.triggers.Always","x":360,"y":368,"group":"bee5c375fd30114e","id":"bee6fa2bd296004a"}],"links":[{"input_id":"7b91ad6bf58d0840i4","output_id":"7bd2552f9af32845o0"},{"input_id":"7bd232db3e5f2948i1","output_id":"bee5c375fd30114eo0"},{"input_id":"7bd2552f9af32845i1","output_id":"7bd232db3e5f2948o0"},{"input_id":"7bd2552f9af32845i1","output_id":"7bd232db3e5f2948o0"},{"input_id":"7b91ad6bf58d0840i4","output_id":"7bd2552f9af32845o0"},{"input_id":"7bd232db3e5f2948i1","output_id":"bee5c375fd30114eo0"},{"input_id":"bee5c379a2756540i0","output_id":"bee5c376e28dab41o0"},{"input_id":"bee5c37a4c8b6d47i0","output_id":"bee5c376e28dab41o0"},{"input_id":"bee5c379a2756540i1","output_id":"bee5c376e32f554eo0"},{"input_id":"bee5c379a2756540i2","output_id":"bee5c376e32f554eo0"},{"input_id":"bee5c37a4c8b6d47i1","output_id":"bee5c376e32f554eo0"},{"input_id":"bee5c37ae9e7cf44i0","output_id":"bee5c3769c44874bo0"},{"input_id":"bee5c37a77016f41i0","output_id":"bee5c3769c44874bo0"},{"input_id":"bee5c37ae9e7cf44i1","output_id":"bee5c376f546c44co0"},{"input_id":"bee5c37a77016f41i1","output_id":"bee5c376f546c44co0"},{"input_id":"bee5c37a77016f41i2","output_id":"bee5c376f546c44co0"},{"input_id":"bee5c379a2f1d34ai0","output_id":"bee5c379a2756540o0"},{"input_id":"bee5c379ebecf543i0","output_id":"bee5c379a2756540o0"},{"input_id":"bee5c379a2f1d34ai1","output_id":"bee5c379ebecf543o0"},{"input_id":"bee5c379a2f1d34ai2","output_id":"bee5c379ebecf543o0"},{"input_id":"bee5c37952bb964ai0","output_id":"bee5c379a2f1d34ao0"},{"input_id":"bee5c37af828e242i0","output_id":"bee5c37a77016f41o0"},{"input_id":"bee5c37ae1f0074fi0","output_id":"bee5c37a77016f41o0"},{"input_id":"bee5c37af828e242i1","output_id":"bee5c37ae1f0074fo0"},{"input_id":"bee5c37af828e242i2","output_id":"bee5c37ae1f0074fo0"},{"input_id":"bee5c37952bb964ai1","output_id":"bee5c37af828e242o0"},{"input_id":"bee5c37bf35f1847i0","output_id":"bee5c37a4c8b6d47o0"},{"input_id":"bee5c37bf35f1847i1","output_id":"bee5c37ae9e7cf44o0"},{"input_id":"bee5c37bf35f1847i2","output_id":"bee5c37ae9e7cf44o0"},{"input_id":"bee5c37a609e1541i0","output_id":"bee5c37bf35f1847o0"},{"input_id":"bee5c37a4c8b6d47i2","output_id":"bee5c37bc5e6304co0"},{"input_id":"bee5c37a4c8b6d47i3","output_id":"bee5c37b5b773344o0"},{"input_id":"bee5c37ae9e7cf44i3","output_id":"bee5c37b5b773344o0"},{"input_id":"bee5c37ae9e7cf44i2","output_id":"bee5c37bd9a8f840o0"},{"input_id":"bee5c37a4c8b6d47i4","output_id":"bee6fa2bd296004ao0"},{"input_id":"bee5c37ae9e7cf44i4","output_id":"bee6fa2bd296004ao0"}]}}}

Input the screen’s width and height (in blocks) and the padding to the edge of the camera, and you’ll be set.

(You can find this all in the game if you want)

Bye the way, you can join the flowlab discord if you want help faster. There’s many helpful users there, and we’d love to have more teachers around. Flowlab Community

1 Like