• Как организовать добавление новых html элементов с расширением базы данных?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Офф кос, тут скупые на слова ребята, а я добрый, я расскажу. :-D
    Во фласке есть шаблонизатор, обычно это jinja.pocoo.org
    Там есть циклы, выглядят примерно так
    {% extends "layout.html" %}
    {% block news %}
      <div class="news--block">
      {% for item in news %}
        <div class="news--item">
        <h1>{{ item.header }}</h1>
        {{ item.body }}
       </div>
      {% endfor %}
      </ul>
    {% endblock %}

    Так вот из этого примера: news - массив объектов "новости", которые мы итерируем циклом и выводим в блок news.

    В методе делаем примерно так:
    from flask import render_template
    
    @app.route('/')
    def hello(name=None):
        news = [{"header":"Fake news: Trump died", "body":"Sorry, world."}, {"header":"Fake news: Trump now alive", "body":"Sorry, world again."}]
        return render_template('main.html', news=news)
    Ответ написан
    2 комментария
  • Почему Segmentation fault?

    myjcom
    @myjcom
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Node {
        struct Node* next;
        int value;
    } Node;
    
    typedef struct List {
        Node* head;
        Node* list[10];
    } List;
    
    void newNode(List* change_list, int value) {
        int size = sizeof(change_list)/sizeof(*change_list);
    
        if (size == 0) {
            Node* new_node = (Node*)malloc(sizeof(Node));
            new_node->next = NULL; // здесь
            new_node->value = value; // и здесь вываливается ошибка
            change_list->list[size] = new_node;
            change_list->head = change_list->list[0];
        }
    }
    
    int main() {
        List* new_list = (List*)malloc(sizeof(List));
        newNode(new_list, 5);
        printf("%d", new_list->list[0]->value);
    }


    https://ru.stackoverflow.com/questions/245369/Вопр...

    eще free() для List и
    каждого узла нужно будет вызвать.
    Ответ написан
    2 комментария
  • Почему Segmentation fault?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Чего удивительного-то?
    Node* new_node;
    завели указатель на структуру Node. Который указывает в никуда, то есть по случайному адресу, который там будет записан. Нужно вот так:
    Node* new_node = (Node *) calloc((sizeof(Node),1);
    Это сразу и память выделит и проинициализирует ее нулями.
    Ответ написан
    Комментировать
  • Принцип работы анимации?

    @Mercury13
    Программист на «си с крестами» и не только
    time — это длительность такта (в игре, очевидно, не просто переменный FPS, но и переменная тактовая частота). Писал такое, правда, не в платформере, а в гоночке.

    rect.left — это точное решение дифура left′ = dx (движение с постоянной скоростью). Очевидно, dx где-то устанавливается по управлению.

    rect.top и dy — это приближённое решение дифура top′′ = 0,005, если снят флаг onGround (полёт под действием силы тяжести). Здесь 0,005 — это ускорение силы тяжести, ось Y направлена вниз. Дифур второго порядка, преобразуется в систему top' = dy, dy′ = 0,005, и то, что в первом случае было точным, здесь приближённое, но приемлемое для игр.

    currentFrame просто прокручивается, чтобы 6-кадровая анимация прошла за 1200 тактов, независимо от частоты. Здесь 1200 = 6 / 0,005.

    Заметьте, dx и dy проходят по разным трактам данных: один — состояние управления, второй — состояние физики персонажа. К тому же что делает dx = 0 и где он ставится не в 0, чтобы не зависеть от частоты автоповтора клавы — непонятно. И много магических констант. Говнокод.

    UPD. Прямые ответы на ваши вопросы.
    1) 6-кадровая анимация, но тут одно из двух. Либо из-за огромного цикла (1200 тактов) явно анимируются не ноги. А может, афтар гонит такты с предельной частотой и потому 1200 тактов действительно пройдут за секунду-две, но тогда это слишком уж явная привязка к скорости компьютера;
    2) в зависимости от номера кадра выбираем тот или иной спрайт на атласе;
    3) dy — скорость, и чтобы откорректировать положение (rect.y), надо прибавить к нему скорость·время.

    UPD2. Кроме того, непонятно, почему в коде анимации нет бега в разные стороны. Хотя из-за крайне простой физики есть подозрение, что жанр — бесконечная бегалка.
    Ответ написан
    3 комментария