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.
Frame for tetris
-
@cvp that correction I can do 😅
It was at the beginning before super, but somehow didn’t work. So I put after. And what changes if it’s after super? -
@cvp By the way do you know how to allow multi_touch? This for another thing that is nearly ready
-
@Karina said:
And what changes if it’s after super?
If you do "after super().init..", you already have passed the path to node creation and all lines are added to the object path but not to the path of the node it-self
-
-
@Karina, is this recent thread relevant to your multi-touch question?
-
@mikael yes, I want to do smth like that. I’ll also look in github, but I didn’t use it before
-
@cvp @mikael sorry, I have another problem. I still can’t writing smth by myself🙂
I tried here to add a block on the board, but it doesn’t show it. But prints the position
from scene import * import random import arrows sw, sh = get_screen_size() rect_w = sw/3 #343.33 rect_h = sh-100 #668 side = int(rect_w/10) colors = ['red'] class Board(ShapeNode): def __init__(self, stroke_color='lightgrey', line_width=1, parent=None, *args, **kwargs): path = ui.Path.rect(0, 0, rect_w, rect_h) path.line_width = line_width if stroke_color == 'lightgrey': d = int(rect_w/10) for l in range(int(rect_w/d)): x = l*d path.move_to(x, 0) path.line_to(x, rect_h) super().__init__(path, fill_color='white', stroke_color=stroke_color, parent=parent, *args, **kwargs) class Game(Scene): def setup(self): self.background_color = 'white' grey_rect = Board(line_width=2, parent=self, position=(sw/3, sh/2), z_position=0) self.board = Board(stroke_color='purple', line_width=15, parent=self, position=(sw/3, sh/2), z_position=-1) self.add_buttons() self.add_figure() def add_buttons(self): ars = arrows.Main() self.present_modal_scene(ars) def add_figure(self): x = random.choice(range(10)) * side y = rect_h block = SpriteNode('pzl:Yellow7', (x, y), z_position=1, size=Size(side, side), parent=self.board) print(block.position) run(Game()) ```
-
@Karina try the gray_rect as parent for yours blocks because it is above the board
self.grey_rect = Board(line_width=2, parent=self, position=(sw/3, sh/2), z_position=0)
and don't forget child position is versus the center of the parent node
def add_figure(self): r = random.choice(range(10)) x = r * side - rect_w/2 + side/2 y = rect_h/2 - side/2 block = SpriteNode('pzl:Yellow7', position=(x, y), size=Size(side, side), parent=self.grey_rect) #print(block.position)
-
@Karina Here, if you let self.board as parent and use r = 10, you can see that your block is partially hidden by the grid
r = 10 x = r * side - rect_w/2 + side/2 y = rect_h/2 - side/2 block = SpriteNode('pzl:Yellow7', position=(x, y), size=Size(side, side), parent=self.board)#self.grey_rect)
-
@cvp so the center is (0, 0)?
-
-
@Karina read also the doc about anchor_point
-
@cvp did so that the block moves down, but for ⬅️➡️ my touch_began doesn’t work. I did this
def touch_began(self, touch): print('touch_began')
And nothing in the console
-
@Karina where did you insert your touch_began? I put it in the game class and print is ok
class Game(Scene): def touch_began(self, touch): print('touch_began') def setup(self): . . .```
-
@Karina I want to add that, sincerely, I don't have any experience in scene module. I always have to try/test before that I can answer something. By example, for position, I've tried some values before to be able to answer something intelligent 😇
-
@cvp it’s in the game class that inherited scene. And update in the class he sees
-
from scene import * import random import arrows sw, sh = get_screen_size() rect_w = sw/3 #343.33 rect_h = 612 #668 side = int(rect_w/10) colors = ['red'] class Board(ShapeNode): def __init__(self, stroke_color='lightgrey', line_width=1, parent=None, *args, **kwargs): path = ui.Path.rect(0, 0, rect_w, rect_h) path.line_width = line_width if stroke_color == 'lightgrey': d = int(rect_w/10) for l in range(int(rect_w/d)): x = l*d path.move_to(x, 0) path.line_to(x, rect_h) super().__init__(path, fill_color='white', stroke_color=stroke_color, parent=parent, *args, **kwargs) class Game(Scene): def setup(self): self.background_color = 'white' self.grey_rect = Board(line_width=2, parent=self, position=(sw/3, sh/2), z_position=0) self.board = Board(stroke_color='purple', line_width=15, parent=self, position=(sw/3, sh/2), z_position=-1) self.seconds = 0 self.figures = {} self.add_buttons() self.add_figure() def update(self): self.seconds += self.dt if self.seconds > 0.5: for f in self.figures: self.figures[f][1] -= side/2 f.position = self.figures[f] self.seconds = 0 if f.position.y == - rect_h/2 + side/2: self.add_figure() self.figures.pop(f) def touch_began(self, touch): print('touch_began') def add_buttons(self): ars = arrows.Main() self.present_modal_scene(ars) def add_figure(self): x = random.choice(range(10)) * side - rect_w/2 + side/2 y = rect_h/2 - side/2 block = SpriteNode('pzl:Yellow7', (x, y), z_position=1, size=Size(side, side), parent=self.grey_rect) self.figures[block] = [x, y] run(Game())
Maybe you’ll check if it works?
-
You’re talking about that position in the beginnig, when I couldn’t move the purple rect from the corner?)
-
@Karina said:
Maybe you’ll check if it works?
I don't have the arrows module thus no button, but if I touch anywhere in game, it prints touch_began
-
And if with arrows? Maybe it looks on that touch_began
from scene import * import sound def sw(): return get_screen_size()[0] def sh(): return get_screen_size()[1] def bw(): return 100 def bh(): return 100 right = left = down = up = None icons = { 'iob:arrow_down_b_256' : (sw()/4*3, 60), 'iob:arrow_up_b_256' : (sw()/4*3, bh() + 60), 'iob:arrow_left_b_256' : (sw()/4*3 - 95, bh()), 'iob:arrow_right_b_256' : (sw()/4*3 + 95, bh()) } class Arrow(ShapeNode): def __init__(self, picture, path=None, size=Size(120, 120), corner_radius=8, border_size=20, borderColor='#3f0917', position=(0,0), parent=None, *args, **kwargs): #for border self.picture = picture self.corner_radius = corner_radius self.border_size = border_size self.borderColor = borderColor self.position = position self.size = size #for super() self.x, self.y = position self.w, self.h = size super().__init__(fill_color='white', path=ui.Path.rounded_rect(self.x, self.y, self.w/1.5, self.h/1.5, self.corner_radius), stroke_color=borderColor, parent=parent, *args, **kwargs) self._setup(self.picture) def _setup(self, pict): if self.picture: arrow = SpriteNode(self.picture, position=Point(0, 0), size=(100, 100), parent=self) class Main(Scene): def setup(self): fill_color = self.background_color self.background_color = 'white' self.arrows = [Arrow(i, position=icons[i], parent=self) for i in icons] def touch_began(self, touch): tapped = True for arw in self.arrows: if touch.location in arw.frame: sound.play_effect('rpg:Chop') arw.fill_color = '#969696' if 'right' in arw.picture: global right right = True def touch_ended(self, touch): for arw in self.arrows: if arw.fill_color == '#969696': arw.fill_color = 'white' right = left = down = up = None if __name__ == '__main__': run(Main(), PORTRAIT)