AMcoder - javascript, python, java, html, php, sql

Մշակում – Կանգնեցրեք պատկերի անհետացումը մեկ ուրիշն ընտրելիս

Ես կարող եմ իմ համակարգչից ընտրել պատկերի ֆայլ՝ օգտագործելով keyPressed() ֆունկցիայի «t» ստեղնը և ցուցադրել այն էկրանին, բայց երբ նորից սեղմում եմ «t» ստեղնը՝ այլ պատկեր ընտրելու համար, նախորդ պատկերն անհետանում է:

Ես կցանկանայի, որ իմ ծրագրում պատկերը չանհետանա մյուսն ընտրելիս և ցուցադրելիս:

Ես կցանկանայի նաև background() ունենալ draw()-ի ներսում, քանի որ պատկերը կթողնի պատկերների հետքեր, երբ այն տեղափոխեմ մկնիկը:

Իմ կոդը

PImage img;
int imgX, imgY;
int mX, mY;
String path ="";

void setup() {
    size(1000, 800);
}

void draw() {
    background(204);
    if(mousePressed){ // is the mousebutton being held?
        imgX = mouseX-mX;
        imgY = mouseY-mY;
    }
    if (img != null) {
        image(img, imgX, imgY);
    }
    text("Press 't' to load an image", 40, 100);
}

void handleImage(File selection) {
    if (selection== null) {
        println ("nono");
    } 
    else {
        path = selection.getAbsolutePath();
        img = loadImage(path);
    }
}

void mousePressed()
{
    // set variables for holding mouseposition offset
    // to the image
    mX = mouseX-imgX;
    mY = mouseY-imgY;
}

void keyPressed() {
    if(key == 't') {
        img = null;
        selectInput("select an image", "handleImage");
    }
}
18.04.2020

  • Պատկերը չի անհետանում. Պատկերը պարզապես փոխվում է, քանի որ դուք ունեք ընդամենը 1 պատկեր (img): Ամբողջ տեսարանը վերագծվում է յուրաքանչյուր կադրում, որպեսզի կարողանաք պարզապես տեսնել ընթացիկ պատկերը: 18.04.2020

Պատասխանները:


1

Պատկերը չի անհետանում. Պատկերը պարզապես փոխվում է, քանի որ դուք ունեք ընդամենը 1 պատկեր (img): Ամբողջ տեսարանը վերագծվում է յուրաքանչյուր կադրում, այնպես որ դուք կարող եք պարզապես տեսնել «ընթացիկ» պատկերը:

Ստեղծեք MyImage դաս, որը կարող է նկարել պատկեր և փոխել պատկերի դիրքը.

class MyImage {
    PImage img;
    int x, y;

    MyImage(PImage img, int x, int y) {
        this.img = img;
        this.x = x;
        this.y = y;
    }

    void changePosition(int dx, int dy) {
        this.x += dx;
        this.y += dy;
    }

    void draw() {
        image(img, x, y);
    }
}

Օգտագործեք ArrayList մի քանի պատկերներ կառավարելու համար.

ArrayList<MyImage> images = new ArrayList<MyImage>();

Ավելացրեք նոր պատկեր, երբ սեղմված է t:

String path = selection.getAbsolutePath();
PImage image = loadImage(path);
images.add(new MyImage(image, 0, 0));

Նկարեք բոլոր պատկերները օղակով

for (int i = 0; i < images.size(); i++) {
    MyImage img = images.get(i);
    img.draw();
}

Օգտագործեք mouseDragged() միջոցառման հետ կանչը՝ ցուցակի վերջին պատկերը քաշելու համար.

void mouseDragged() {
    if (images.size() > 0) {
        images.get(images.size()-1).changePosition(mouseX-pmouseX, mouseY-pmouseY);
    }
}

Տես օրինակը.

class MyImage {
    PImage img;
    int x, y;

    MyImage(PImage img, int x, int y) {
        this.img = img;
        this.x = x;
        this.y = y;
    }

    void changePosition(int dx, int dy) {
        this.x += dx;
        this.y += dy;
    }

    void draw() {
        image(img, x, y);
    }
}

ArrayList<MyImage> images = new ArrayList<MyImage>();

void setup() {
    size(1000, 800);
}

void draw() {
    background(204);
    for (int i = 0; i < images.size(); i++) {
        MyImage img = images.get(i);
        img.draw();
    }
    text("Press 't' to load an image", 40, 100);
}

void handleImage(File selection) {
    if (selection == null) {
        println ("nono");
    } 
    else {
        String path = selection.getAbsolutePath();
        PImage image = loadImage(path);
        images.add(new MyImage(image, 0, 0));
    }
}

void mouseDragged() {
    if (images.size() > 0) {
        images.get(images.size()-1).changePosition(mouseX-pmouseX, mouseY-pmouseY);
    }
}

void keyPressed() {
    if(key == 't') {
        selectInput("select an image", "handleImage");
    }
}
18.04.2020
  • @Rabbid76 շատ լավ բացատրված պատասխան (+1)! (հիմար հարց. ինչ եք օգտագործում gif-ներ ձայնագրելու համար): 18.04.2020
  • @GeorgeProfenza Շնորհակալություն: Ես օգտագործում եմ ScrenToGif: Հրաշալի հեշտ է, բայց դա միայն Windows OS-ի համար է: 18.04.2020
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..