Thank you. I’m a beginner so learning to simplify code will be really good.
Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
Best posts made by BurntRice
-
RE: Why is my movement code wrong?
Latest posts made by BurntRice
-
RE: Help me find a way to make the lasers fire in a certain direction.
from scene import * import math import random import sound import ui A = Action() width, height = ui.get_screen_size() #Setting up meteorites #Setting up background colour for the entire scene class Game(Scene): def setup(self): self.bg = SpriteNode('spc:BackgroundBlack') self.lasers = [] self.items = [] self.LaserTime = 0 self.frame_counter = 0 self.meteor = [] #Creating the player self.Player = SpriteNode('iow:arrow_up_b_32') self.Player.color = (1.0, 1.0, 1.0) self.Player.anchor_point = (0.5, 0.5) self.Player.x_scale = 2/1.0 self.Player.y_scale = 3/1.0 self.Player.position = (512, 400) self.Player.rotation = 0.0 self.add_child(self.Player) self.UpCrtl = SpriteNode('iow:arrow_up_b_32') self.UpCrtl.x_scale = 3.5/1.0 self.UpCrtl.y_scale = 3.5/1.0 self.UpCrtl.alpha = 0.5 self.UpCrtl.position = (175, 295) self.add_child(self.UpCrtl) self.RightCrtl = SpriteNode('iow:arrow_right_b_32') self.RightCrtl.x_scale = 3.5/1.0 self.RightCrtl.y_scale = 3.5/1.0 self.RightCrtl.alpha = 0.5 self.RightCrtl.position = (250, 212.5) self.add_child(self.RightCrtl) self.LeftCrtl = SpriteNode('iow:arrow_left_b_32') self.LeftCrtl.x_scale = 3.5/1.0 self.LeftCrtl.y_scale = 3.5/1.0 self.LeftCrtl.alpha = 0.5 self.LeftCrtl.position = (100, 212.5) self.add_child(self.LeftCrtl) #The button for shooting self.laserButton = SpriteNode('shp:Circle') self.laserButton.color = ('gray') self.laserButton.x_scale = 3/1 self.laserButton.y_scale = 3/1 self.add_child(self.laserButton) self.laserButton.position = (1000, 212.5) #The score label self.score_label = LabelNode(text='Score: 0') self.score_label.anchor_point = (0, 0) self.score_label.position = (10, 790) self.score_label.font = ('Joystix', 30) self.add_child(self.score_label) #Movement code. def update(self): self.handle_button_presses() self.move_lasers() self.update_lasers() self.spawn_meteor() width, height = ui.get_screen_size() self.LaserTime = self.LaserTime + 1 def handle_button_presses(self): rotationAdd = math.pi/180 self.Player.location = self.Player.position for touch in self.touches.values(): if touch.location in self.LeftCrtl.bbox: actions = [A.rotate_by(math.pi/180)] self.Player.rotation = self.Player.rotation + rotationAdd self.Player.run_action(A.sequence(actions)) if touch.location in self.RightCrtl.bbox: actions = [A.rotate_by(math.pi/-180)] self.Player.rotation = self.Player.rotation - rotationAdd self.Player.run_action(A.sequence(actions)) if touch.location in self.UpCrtl.bbox: direction = Vector2(-math.sin(self.Player.rotation), math.cos(self.Player.rotation)) self.Player.position += direction*3 self.Player.position.x %= width self.Player.position.y %= height def move_lasers(self): for touch in self.touches.values(): if touch.location in self.laserButton.bbox and self.LaserTime >= 15: #reset the time self.LaserTime = 0 new_laser = SpriteNode('shp:Circle') new_laser.x_scale = 0.3/1.0 new_laser.y_scale = 0.3/1.0 new_laser.position = self.Player.position new_laser.rotation = self.Player.rotation self.add_child(new_laser) self.lasers.append(new_laser) sound.play_effect('arcade:Laser_6') def update_lasers(self): for l in self.lasers: l.direction = Vector2(-math.sin(l.rotation), math.cos(l.rotation))*10 l.position += l.direction if l.position.x < 0: l.remove_from_parent() self.lasers.remove(l) if l.position.x > 1112: l.remove_from_parent() self.lasers.remove(l) if l.position.y < 0: l.remove_from_parent() self.lasers.remove(l) if l.position.y > 834: l.remove_from_parent() self.lasers.remove(l) def spawn_meteor(self): self.frame_counter = self.frame_counter + 1 if self.frame_counter >= 60: self.frame_counter = 0 new_meteor = SpriteNode('spc:MeteorGraySmall1') new_meteor.position = (random.randint(0, 1024), 834) self.add_child(new_meteor) self.meteor.append(new_meteor) for meteor in self.meteor: meteor.position = (meteor.position.x, meteor.position.y - 5) if meteor.position.y < - 100: meteor.remove_from_parent() self.meteor.remove(meteor) if __name__ == '__main__': run(Game(), LANDSCAPE, show_fps=True)
-
RE: Help me find a way to make the lasers fire in a certain direction.
I tried placing it self.update, but then it wouldn’t work.
-
RE: Help me find a way to make the lasers fire in a certain direction.
width, height = ui.get_screen_size()
I think this is right. I did a seperate script where I print it out inside the console, and it worked. -
RE: Help me find a way to make the lasers fire in a certain direction.
Here you go:
def handle_button_presses(self): rotationAdd = math.pi/180 self.Player.location = self.Player.position for touch in self.touches.values(): if touch.location in self.LeftCrtl.bbox: actions = [A.rotate_by(math.pi/180)] self.Player.rotation = self.Player.rotation + rotationAdd self.Player.run_action(A.sequence(actions)) if touch.location in self.RightCrtl.bbox: actions = [A.rotate_by(math.pi/-180)] self.Player.rotation = self.Player.rotation - rotationAdd self.Player.run_action(A.sequence(actions)) if touch.location in self.UpCrtl.bbox: direction = Vector2(-math.sin(self.Player.rotation), math.cos(self.Player.rotation)) self.Player.position += direction*3 if self.Player.position.x <= 0 or self.Player.position.x >= 1112: self.Player.position.x %= width if self.Player.position.y <= 0 or self.Player.position.y >= 834: self.Player.position.y %= height
I did change the movement code a little.
-
RE: Help me find a way to make the lasers fire in a certain direction.
Whenever the Players position.x is equal to or smaller than 0 or whenever the position.x is equal to or greater than 1112, you do the remainder of the division of the screen height.
-
RE: Help me find a way to make the lasers fire in a certain direction.
I have added this:
width, height = ui.get_screen_size()
And then added this later:
if self.Player.position.x <= 0 or self.Player.position.x >= 1112:
self.Player.position.x %= width
if self.Player.position.y <= 0 or self.Player.position.y >= 834:
self.Player.position.y %= height
This didn’t work. I checked if I had gotten the width and height variables in a seperate script, and I did. I am now stumped. -
RE: Help me find a way to make the lasers fire in a certain direction.
@cvp And what about location?
-
RE: Help me find a way to make the lasers fire in a certain direction.
Wait, how do find the screen width and height? And what about location?